@rdna/radiants 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +125 -0
  3. package/animations.css +68 -0
  4. package/assets/scrollbar-background.svg +9 -0
  5. package/base.css +144 -0
  6. package/dark.css +117 -0
  7. package/dist/chunk-SR2T7OEJ.mjs +46 -0
  8. package/dist/chunk-SR2T7OEJ.mjs.map +1 -0
  9. package/dist/components/core/index.d.mts +911 -0
  10. package/dist/components/core/index.mjs +2475 -0
  11. package/dist/components/core/index.mjs.map +1 -0
  12. package/dist/hooks/index.d.mts +22 -0
  13. package/dist/hooks/index.mjs +3 -0
  14. package/dist/hooks/index.mjs.map +1 -0
  15. package/dist/remotion/index.d.mts +252 -0
  16. package/dist/remotion/index.mjs +170 -0
  17. package/dist/remotion/index.mjs.map +1 -0
  18. package/dna.config.json +8 -0
  19. package/fonts/Joystix.woff2 +0 -0
  20. package/fonts/PixelCode-Black-Italic.woff2 +0 -0
  21. package/fonts/PixelCode-Black.woff2 +0 -0
  22. package/fonts/PixelCode-Bold-Italic.woff2 +0 -0
  23. package/fonts/PixelCode-Bold.woff2 +0 -0
  24. package/fonts/PixelCode-DemiBold-Italic.woff2 +0 -0
  25. package/fonts/PixelCode-DemiBold.woff2 +0 -0
  26. package/fonts/PixelCode-ExtraBlack-Italic.woff2 +0 -0
  27. package/fonts/PixelCode-ExtraBlack.woff2 +0 -0
  28. package/fonts/PixelCode-ExtraBold-Italic.woff2 +0 -0
  29. package/fonts/PixelCode-ExtraBold.woff2 +0 -0
  30. package/fonts/PixelCode-ExtraLight-Italic.woff2 +0 -0
  31. package/fonts/PixelCode-ExtraLight.woff2 +0 -0
  32. package/fonts/PixelCode-Italic.woff2 +0 -0
  33. package/fonts/PixelCode-Light-Italic.woff2 +0 -0
  34. package/fonts/PixelCode-Light.woff2 +0 -0
  35. package/fonts/PixelCode-Medium-Italic.woff2 +0 -0
  36. package/fonts/PixelCode-Medium.woff2 +0 -0
  37. package/fonts/PixelCode-Thin-Italic.woff2 +0 -0
  38. package/fonts/PixelCode-Thin.woff2 +0 -0
  39. package/fonts/PixelCode.woff2 +0 -0
  40. package/fonts.css +115 -0
  41. package/index.css +25 -0
  42. package/package.json +88 -0
  43. package/tokens.css +202 -0
  44. package/typography.css +175 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../components/core/Accordion/Accordion.tsx","../../../components/core/Alert/Alert.tsx","../../../components/core/Badge/Badge.tsx","../../../components/core/Breadcrumbs/Breadcrumbs.tsx","../../../components/core/Button/Button.tsx","../../../components/core/Card/Card.tsx","../../../components/core/Checkbox/Checkbox.tsx","../../../components/core/ContextMenu/ContextMenu.tsx","../../../components/core/Divider/Divider.tsx","../../../components/core/DropdownMenu/DropdownMenu.tsx","../../../components/core/Input/Input.tsx","../../../components/core/Progress/Progress.tsx","../../../components/core/Select/Select.tsx","../../../components/core/Slider/Slider.tsx","../../../components/core/Switch/Switch.tsx","../../../components/core/Tabs/Tabs.tsx","../../../components/core/Tooltip/Tooltip.tsx","../../../components/core/Toast/Toast.tsx","../../../components/core/HelpPanel/HelpPanel.tsx","../../../components/core/Popover/Popover.tsx","../../../components/core/Sheet/Sheet.tsx","../../../components/core/MockStatesPopover/MockStatesPopover.tsx","../../../components/core/CountdownTimer/CountdownTimer.tsx","../../../components/core/Web3ActionBar/Web3ActionBar.tsx","../../../components/core/Dialog/Dialog.tsx"],"names":["jsx","jsxs","variantStyles","baseStyles","sizeStyles","_","Checkbox","Radio","createContext","useContext","useState","useRef","useEffect","borderStyle","useCallback","React","forwardRef","Input","TextArea","createPortal","Fragment"],"mappings":";;;;;;AAyBA,IAAM,gBAAA,GAAmB,cAA4C,IAAI,CAAA;AACzE,IAAM,oBAAA,GAAuB,cAAgD,IAAI,CAAA;AAEjF,SAAS,mBAAA,GAAsB;AAC7B,EAAA,MAAM,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,uBAAA,GAA0B;AACjC,EAAA,MAAM,OAAA,GAAU,WAAW,oBAAoB,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,OAAA;AACT;AAqBO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA,GAAO,QAAA;AAAA,EACP,YAAA;AAAA,EACA,KAAA,EAAO,eAAA;AAAA,EACP,aAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAAmB;AAEjB,EAAA,MAAM,qBAAqB,MAAmB;AAC5C,IAAA,MAAM,UAAU,eAAA,IAAmB,YAAA;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS,uBAAO,IAAI,GAAA,EAAI;AAC7B,IAAA,OAAO,IAAI,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,CAAC,OAAO,CAAC,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAsB,kBAAkB,CAAA;AAGlF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,MAAA,gBAAA,CAAiB,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,eAAe,IAAI,eAAA,GAAkB,CAAC,eAAe,CAAC,CAAC,CAAA;AAAA,IAChG;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,CAAC,SAAA,KAAsB;AACpD,IAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AAEzB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,IAAA,CAAK,KAAA,EAAM;AAAA,QACb;AACA,QAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAAA,MACpB;AAGA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAChC,QAAA,aAAA,CAAc,SAAS,QAAA,GAAY,QAAA,CAAS,CAAC,CAAA,IAAK,KAAM,QAAQ,CAAA;AAAA,MAClE;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAA,2BACG,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,EAAE,IAAA,EAAM,aAAA,EAAe,UAAA,EAAW,EAClE,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAW,aAAa,SAAS,CAAA,CAAA,EACnC,UACH,CAAA,EACF,CAAA;AAEJ;AAeO,SAAS,cAAc,EAAE,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,UAAS,EAAuB;AACrF,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,mBAAA,EAAoB;AAC9C,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAE1C,EAAA,uBACE,GAAA,CAAC,qBAAqB,QAAA,EAArB,EAA8B,OAAO,EAAE,KAAA,EAAO,YAAW,EACxD,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,UAAA,EAIP,SAAS;AAAA,QAAA,CAAA,CACX,IAAA,EAAK;AAAA,MACP,YAAA,EAAY,aAAa,MAAA,GAAS,QAAA;AAAA,MAEjC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAaO,SAAS,gBAAA,CAAiB,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAA0B;AACpF,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,mBAAA,EAAoB;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,uBAAA,EAAwB;AAEtD,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,MAC/B,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAQP,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,MACP,eAAA,EAAe,UAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,wBAChB,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uCAAA;AAAA,YACV,aAAA,EAAY,MAAA;AAAA,YAEX,uBAAa,QAAA,GAAM;AAAA;AAAA;AACtB;AAAA;AAAA,GACF;AAEJ;AAaO,SAAS,gBAAA,CAAiB,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAA0B;AACpF,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,uBAAA,EAAwB;AAC/C,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA6B,MAAS,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AAEpD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAI,UAAA,EAAY;AAEd,MAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAC7B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,cAAA,CAAe,IAAI,CAAA;AAEnB,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,cAAA,CAAe,KAAK,CAAA;AACpB,QAAA,SAAA,CAAU,MAAS,CAAA;AAAA,MACrB,GAAG,GAAG,CAAA;AAEN,MAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,IACjC,CAAA,MAAO;AAEL,MAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAC7B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,cAAA,CAAe,IAAI,CAAA;AAGnB,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,SAAA,CAAU,CAAC,CAAA;AAAA,MACb,CAAC,CAAA;AAED,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB,GAAG,GAAG,CAAA;AAEN,MAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW;AAAA;AAAA;AAAA,QAAA,EAGP,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,MACP,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,WAAA,GAAc,MAAA,GAAU,UAAA,GAAa,MAAA,GAAS;AAAA,OACxD;AAAA,MACA,eAAa,CAAC,UAAA;AAAA,MAEd,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACxOA,IAAM,aAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,6DAAA;AAAA,EACT,OAAA,EAAS,iEAAA;AAAA,EACT,OAAA,EAAS,iEAAA;AAAA,EACT,KAAA,EAAO,6DAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAYO,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,SAAA;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAe;AACb,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,QAAA,EAIP,aAAA,CAAc,OAAO,CAAC;AAAA,QAAA,EACtB,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,MAEP,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,IAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAIFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDACZ,QAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAGC,4BACCA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,wEAAA;AAAA,YACV,YAAA,EAAW,OAAA;AAAA,YAEV,uCACCA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAM,4BAAA;AAAA,gBAEN,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,sBAAA;AAAA,oBACF,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF;AAAA;AAEJ,OAAA,EAEJ;AAAA;AAAA,GACF;AAEJ;AC5FA,IAAM,UAAA,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAUnB,IAAM,UAAA,GAAwC;AAAA,EAC5C,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKA,IAAME,cAAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,oEAAA;AAAA,EACT,OAAA,EAAS,mEAAA;AAAA,EACT,OAAA,EAAS,mEAAA;AAAA,EACT,KAAA,EAAO,iEAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AASO,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAe;AACb,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,UAAA;AAAA,IACA,WAAW,IAAI,CAAA;AAAA,IACfA,eAAc,OAAO,CAAA;AAAA,IACrB;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AAER,EAAA,uBACEF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,SACd,QAAA,EACH,CAAA;AAEJ;ACnDO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAqB;AACnB,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,YAAA;AAAA,MACX,SAAA,EAAW,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAEvD,QAAA,kBAAAA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2BACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,QAAA,MAAM,MAAA,GAAS,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,CAAA;AAExC,QAAA,uBACEC,IAAAA,CAAC,IAAA,EAAA,EAAe,SAAA,EAAU,yBAAA,EAEvB,QAAA,EAAA;AAAA,UAAA,KAAA,GAAQ,qBACPD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iDAAA;AAAA,cACV,aAAA,EAAY,MAAA;AAAA,cAEX,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAID,IAAA,CAAK,IAAA,IAAQ,CAAC,MAAA,mBACbA,GAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,SAAA,EAAU,8GAAA;AAAA,cAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,8BAGRA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW;AAAA;AAAA,oBAAA,EAEP,MAAA,GAAS,uCAAuC,yBAAyB;AAAA,kBAAA,CAAA,CAC3E,IAAA,EAAK;AAAA,cACP,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,cAE/B,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR,SAAA,EAAA,EA5BK,KA8BT,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;AC5BA,IAAMG,WAAAA,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAsBnB,IAAMC,WAAAA,GAAyC;AAAA,EAC7C,EAAA,EAAI,wBAAA;AAAA,EACJ,EAAA,EAAI,wBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAMA,IAAM,kBAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AASA,IAAMF,cAAAA,GAA+C;AAAA,EACnD,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKT,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKX,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMT,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOT,CAAA;AAMA,SAAS,iBACP,OAAA,EACA,IAAA,EACA,QAAA,EACA,SAAA,EACA,WACA,OAAA,EACQ;AAMR,EAAA,IAAI,YAAA,GAAe,eAAA;AACnB,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,YAAA,GAAe,gBAAA;AAAA,EACjB,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,IAAA,YAAA,GAAe,iBAAA;AAAA,EACjB;AAEA,EAAA,OAAO;AAAA,IACLC,WAAAA;AAAA,IACA,QAAA,GAAW,kBAAA,CAAmB,IAAI,CAAA,GAAIC,YAAW,IAAI,CAAA;AAAA,IACrD,YAAA;AAAA,IACAF,eAAc,OAAO,CAAA;AAAA,IACrB,YAAY,QAAA,GAAW,EAAA;AAAA,IACvB;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACV;AAkBO,SAAS,OAAO,KAAA,EAAoB;AACzC,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,SAAA;AAAA,IACV,IAAA,GAAO,IAAA;AAAA,IACP,SAAA,GAAY,KAAA;AAAA,IACZ,QAAA,GAAW,KAAA;AAAA,IACX,IAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,QAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,GAAG;AAAA,GACL,GAAI,KAAA;AAGJ,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,IAAQ,QAAQ,CAAA;AACxC,EAAA,MAAM,WAAA,GAAuB,OAAA,CAAQ,OAAA,IAAW,OAAA,IAAW,gBAAgB,CAAA;AAE3E,EAAA,MAAM,UAAU,gBAAA,CAAiB,OAAA,EAAS,MAAM,QAAA,EAAU,SAAA,EAAW,WAAW,OAAO,CAAA;AAIvF,EAAA,MAAM,OAAA,GAAU,WAAA,mBACdD,IAAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAC,QAAA,IAAY,QAAA;AAAA,IACb;AAAA,GAAA,EACH,CAAA,GACE,IAAA,mBACFA,IAAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAC,QAAA,IAAY,QAAA;AAAA,IACb;AAAA,GAAA,EACH,CAAA,GAEA,QAAA;AAIF,EAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,EAAM;AACjC,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,GAAS,MAAM,MAAA,EAAQ,GAAG,UAAS,GAAI,IAAA;AAGrD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,uBACED,GAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA,EAAW,OAAA;AAAA,UACV,GAAI,QAAA;AAAA,UAEJ,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAGA,IAAA,MAAM,kBAAA,GAA8B,WAAA,IAAe,OAAA,CAAS,QAAA,CAA2D,QAAQ,CAAA;AAC/H,IAAA,MAAM,EAAE,QAAA,EAAUK,EAAAA,EAAG,GAAG,gBAAe,GAAI,QAAA;AAC3C,IAAA,uBACEL,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,OAAA;AAAA,QACX,SAAS,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,UAAU,OAAO,CAAA;AAAA,QAClD,QAAA,EAAU,kBAAA;AAAA,QACT,GAAG,cAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA;AAGpB,EAAA,MAAM,QAAA,GAAoB,WAAA,IAAe,OAAA,CAAQ,WAAA,CAAY,QAAQ,CAAA;AACrE,EAAA,MAAM,EAAE,QAAA,EAAU,CAAA,EAAG,GAAG,4BAA2B,GAAI,WAAA;AAEvD,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAO,SAAA,EAAW,SAAU,GAAG,0BAAA,EAA4B,UACzD,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AC5NA,IAAMG,WAAAA,GAAa;AAAA;AAAA;AAAA;AAAA,CAAA;AAYnB,IAAMD,cAAAA,GAA6C;AAAA,EACjD,OAAA,EAAS;AAAA;AAAA,EAAA,CAAA;AAAA,EAGT,IAAA,EAAM;AAAA;AAAA,EAAA,CAAA;AAAA,EAGN,MAAA,EAAQ;AAAA;AAAA;AAAA,EAAA;AAIV,CAAA;AASO,SAAS,IAAA,CAAK;AAAA,EACnB,OAAA,GAAU,SAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAc;AACZ,EAAA,MAAM,OAAA,GAAU;AAAA,IACdC,WAAAA;AAAA,IACAD,eAAc,OAAO,CAAA;AAAA,IACrB,YAAY,EAAA,GAAK,KAAA;AAAA,IACjB;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AAER,EAAA,uBACEF,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,SACb,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,UAAA,CAAW,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAAoB;AACxE,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,uCAAA,EAA0C,SAAS,IAChE,QAAA,EACH,CAAA;AAEJ;AAKO,SAAS,QAAA,CAAS,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAAkB;AACpE,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,IAAA,EAAO,SAAS,IAC7B,QAAA,EACH,CAAA;AAEJ;AAKO,SAAS,UAAA,CAAW,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAAoB;AACxE,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,uCAAA,EAA0C,SAAS,IAChE,QAAA,EACH,CAAA;AAEJ;AC3GA,SAAS,aAAA,CAAc,EAAE,SAAA,GAAY,EAAA,EAAG,EAA2B;AACjE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACN,SAAA;AAAA,MAEA,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,wBAAA;AAAA,UACF,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA,GACF;AAEJ;AASO,IAAM,QAAA,GAAW,UAAA,CAA4C,SAASM,SAAAA,CAC3E,EAAE,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,KAAA,EAAM,EAC5C,GAAA,EACA;AACA,EAAA,uBACEL,IAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA,QAAA,EAEP,QAAA,GAAW,kCAAkC,EAAE;AAAA,QAAA,EAC/C,SAAS;AAAA,MAAA,CAAA;AAAA,MAGb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,IAAA,EAAK,UAAA;AAAA,cACL,QAAA;AAAA,cACA,SAAA,EAAU,cAAA;AAAA,cACT,GAAG;AAAA;AAAA,WACN;AAAA,0BAEAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA;AAAA;AAAA,WASb;AAAA,0BAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uIAAA,EACb,0BAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBAAA,EAAuB,CAAA,EAClD;AAAA,SAAA,EACF,CAAA;AAAA,QACC,yBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DACb,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAC;AASM,IAAM,KAAA,GAAQ,UAAA,CAAyC,SAASO,MAAAA,CACrE,EAAE,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,KAAA,EAAM,EAC5C,GAAA,EACA;AACA,EAAA,uBACEN,IAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA,QAAA,EAEP,QAAA,GAAW,kCAAkC,EAAE;AAAA,QAAA,EAC/C,SAAS;AAAA,MAAA,CAAA;AAAA,MAGb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,IAAA,EAAK,OAAA;AAAA,cACL,QAAA;AAAA,cACA,SAAA,EAAU,cAAA;AAAA,cACT,GAAG;AAAA;AAAA,WACN;AAAA,0BAEAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA;AAAA;AAAA,WAWb;AAAA,0BAEAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QACC,yBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DACb,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAC;AChGD,IAAM,kBAAA,GAAqBQ,cAA8C,IAAI,CAAA;AAE7E,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,OAAA,GAAUC,WAAW,kBAAkB,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,OAAA;AACT;AASO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAAqB;AAC1E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAAmB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AACjE,EAAA,MAAM,YAAA,GAAeC,OAAuB,IAAI,CAAA;AAEhD,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAkB;AAC9B,IAAA,WAAA,CAAY,GAAG,CAAA;AACf,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAGA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAwB;AACjD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA;AAAA,EACrC,CAAA;AAGA,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,IAAI,YAAA,CAAa,WAAW,CAAC,YAAA,CAAa,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAC5E,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,KAAA,EAAM;AAAA,IAChC,CAAA;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAC5D,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,YAAY,CAAA;AAAA,IACtD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEZ,GAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,KAAA,EAAM,EAClE,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,aAAA,EAAe,iBAAA;AAAA,MACf,SAAA;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAKO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAA4B;AACxF,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,KAAU,cAAA,EAAe;AAEnD,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAQP,SAAS;AAAA,MAAA,CAAA;AAAA,MAEb,KAAA,EAAO;AAAA,QACL,MAAM,QAAA,CAAS,CAAA;AAAA,QACf,KAAK,QAAA,CAAS;AAAA,OAChB;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MAER;AAAA;AAAA,GACH;AAEJ;AAKO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,KAAA;AAAA,EACd,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAyB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,cAAA,EAAe;AAEjC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,MAAA,OAAA,EAAQ;AACR,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,QAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,QAAA,EAIP,WAAA,GAAc,sBAAsB,sBAAsB;AAAA,QAAA,EAC1D,QAAA,GAAW,kCAAkC,wCAAwC;AAAA,QAAA,EACrF,SAAS;AAAA,MAAA,CAAA;AAAA,MAGZ,QAAA,EAAA;AAAA,QAAA,IAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAS;AAAA;AAAA;AAAA,GAClB;AAEJ;AAKO,SAAS,oBAAA,CAAqB,EAAE,SAAA,GAAY,EAAA,EAAG,EAA8B;AAClF,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,wCAAwC,SAAS,CAAA;AAAA;AAAA,GAC9D;AAEJ;AC3LO,SAAS,OAAA,CAAQ;AAAA,EACtB,WAAA,GAAc,YAAA;AAAA,EACd,OAAA,GAAU,OAAA;AAAA,EACV,SAAA,GAAY;AACd,CAAA,EAAiB;AAEf,EAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,EAClD,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAoC,CAAA;AAAA,sBACnDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAAiE,CAAA;AAAA,sBAChFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAoC;AAAA,KAAA,EACrD,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,IAAA,MAAMa,YAAAA,GAAc,OAAA,KAAY,QAAA,GAAW,eAAA,GAAkB,cAAA;AAC7D,IAAA,uBACEb,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,uCAAA,EAA0Ca,YAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,QAC7E,IAAA,EAAK,WAAA;AAAA,QACL,kBAAA,EAAiB;AAAA;AAAA,KACnB;AAAA,EAEJ;AAGA,EAAA,MAAM,WAAA,GAAc,OAAA,KAAY,QAAA,GAAW,eAAA,GAAkB,cAAA;AAC7D,EAAA,uBACEb,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,uCAAA,EAA0C,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MAC7E,IAAA,EAAK,WAAA;AAAA,MACL,kBAAA,EAAiB;AAAA;AAAA,GACnB;AAEJ;ACzCA,IAAM,eAAA,GAAkBQ,cAA2C,IAAI,CAAA;AAEvE,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,OAAA,GAAUC,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO,OAAA;AACT;AAmBO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,QAAA,GAAW,cAAA;AAAA,EACX;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAC7C,EAAA,MAAM,UAAA,GAAaC,OAAoB,IAAI,CAAA;AAE3C,EAAA,MAAM,OAAA,GAAUG,WAAAA,CAAY,CAAC,OAAA,KAAqB;AAChD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACEd,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,QAAA,IAC5D,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,uBAAA,EACZ,UACH,CAAA,EACF,CAAA;AAEJ;AAaO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAU,OAAA,EAAQ,EAA6B;AACnF,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,KAAe,kBAAA,EAAmB;AAEzD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA+F;AAAA,MACvH,OAAA,EAAS,WAAA;AAAA,MACT,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,GAAA,EAAK,UAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MAER;AAAA;AAAA,GACH;AAEJ;AAaO,SAAS,mBAAA,CAAoB,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAA6B;AAC1F,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,QAAA,KAAa,kBAAA,EAAmB;AACnE,EAAA,MAAM,UAAA,GAAaW,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAS,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,CAAA;AAExD,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAW,OAAA,IAAW,CAAC,WAAW,OAAA,EAAS;AAEzD,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB;AACzD,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB;AACzD,IAAA,MAAM,GAAA,GAAM,CAAA;AAEZ,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,IAAA,GAAO,CAAA;AAEX,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,cAAA;AACH,QAAA,GAAA,GAAM,QAAQ,MAAA,GAAS,GAAA;AACvB,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA;AACf,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,GAAA,GAAM,QAAQ,MAAA,GAAS,GAAA;AACvB,QAAA,IAAA,GAAO,OAAA,CAAQ,QAAQ,OAAA,CAAQ,KAAA;AAC/B,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,MAAA,GAAS,GAAA;AACrC,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA;AACf,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,MAAA,GAAS,GAAA;AACrC,QAAA,IAAA,GAAO,OAAA,CAAQ,QAAQ,OAAA,CAAQ,KAAA;AAC/B,QAAA;AAAA;AAIJ,IAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAC,CAAA;AACxE,IAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,UAAA,GAAa,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAC,CAAA;AAExE,IAAA,SAAA,CAAU,EAAE,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,IAAA,EAAM,QAAA,EAAU,UAAU,CAAC,CAAA;AAG/B,EAAA,eAAA,CAAgB,IAAA,EAAM,CAAC,UAAA,EAAY,UAAU,GAAG,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAGpE,EAAA,YAAA,CAAa,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM,OAAO,IAAA;AAE9B,EAAA,OAAO,YAAA;AAAA,oBACLZ,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EASP,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,QACP,OAAO,EAAE,GAAA,EAAK,OAAO,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,QAE3C;AAAA;AAAA,KACH;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAmBO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,KAAA;AAAA,EACd,SAAA,GAAY;AACd,CAAA,EAA0B;AACxB,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,kBAAA,EAAmB;AAEvC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,OAAA,IAAU;AACV,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,UAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,QAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,QAAA,EAIP,WAAA,GAAc,sBAAsB,sBAAsB;AAAA,QAAA,EAC1D,QAAA,GAAW,kCAAkC,2CAA2C;AAAA;AAAA,QAAA,EAExF,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,MAEN;AAAA;AAAA,GACH;AAEJ;AAWO,SAAS,qBAAA,CAAsB,EAAE,SAAA,GAAY,EAAA,EAAG,EAA+B;AACpF,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,WAAA;AAAA,MACL,SAAA,EAAW,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAA,CAAG,IAAA;AAAK;AAAA,GAC9D;AAEJ;AAaO,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAA2B;AACtF,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,QAAA,EAIP,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,MAEN;AAAA;AAAA,GACH;AAEJ;AC7PA,IAAMG,WAAAA,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcnB,IAAMC,WAAAA,GAAwC;AAAA,EAC5C,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,qBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKA,IAAM,WAAA,GAAc;AAAA;AAAA;AAAA,CAAA;AAYb,IAAM,KAAA,GAAQY,UAAAA,CAAyC,SAASC,MAAAA,CACrE;AAAA,EACE,IAAA,GAAO,IAAA;AAAA,EACP,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,WAAA,GAAc,WAAY,IAAA,KAAS,IAAA,GAAO,SAAS,IAAA,KAAS,IAAA,GAAO,UAAU,OAAA,GAAW,EAAA;AAE9F,EAAA,MAAM,OAAA,GAAU;AAAA,IACdd,WAAAA;AAAA,IACAC,YAAW,IAAI,CAAA;AAAA,IACf,QAAQ,WAAA,GAAc,EAAA;AAAA,IACtB,YAAY,QAAA,GAAW,EAAA;AAAA,IACvB,WAAA;AAAA,IACA;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AAER,EAAA,MAAM,KAAA,mBACJJ,GAAAA,CAAC,OAAA,EAAA,EAAM,KAAU,SAAA,EAAW,OAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAGlD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAEb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oBAAA;AAAA,UACV,gBAAA,EAAgB,QAAA;AAAA,UAChB,KAAA,EAAO;AAAA,YACL,OAAO,IAAA,KAAS,IAAA,GAAO,EAAA,GAAK,IAAA,KAAS,OAAO,EAAA,GAAK,EAAA;AAAA,YACjD,QAAQ,IAAA,KAAS,IAAA,GAAO,EAAA,GAAK,IAAA,KAAS,OAAO,EAAA,GAAK;AAAA;AACpD;AAAA,OACF,EACF,CAAA;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,KAAA;AACT,CAAC;AAKM,IAAM,QAAA,GAAWgB,UAAAA,CAA+C,SAASE,SAAAA,CAC9E;AAAA,EACE,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,OAAA,GAAU;AAAA,IACdf,WAAAA;AAAA,IACA,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAQ,WAAA,GAAc,EAAA;AAAA,IACtB,YAAY,QAAA,GAAW,EAAA;AAAA,IACvB;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AAER,EAAA,uBACEH,GAAAA,CAAC,UAAA,EAAA,EAAS,KAAU,SAAA,EAAW,OAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAEvD,CAAC;AAKM,SAAS,KAAA,CAAM,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,EAAA,EAAI,GAAG,OAAM,EAAe;AAClF,EAAA,uBACEC,IAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,4BAAYD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAyB,QAAA,EAAA,GAAA,EAAC;AAAA;AAAA;AAAA,GACzD;AAEJ;AC/IA,IAAMI,WAAAA,GAA2C;AAAA,EAC/C,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAMF,cAAAA,GAAiD;AAAA,EACrD,OAAA,EAAS,mBAAA;AAAA,EACT,OAAA,EAAS,mBAAA;AAAA,EACT,OAAA,EAAS,qBAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AASO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,GAAA,GAAM,GAAA;AAAA,EACN,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAkB;AAChB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAI,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA;AAEjE,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA,EAEjC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAMPI,WAAAA,CAAW,IAAI,CAAC;AAAA,QAAA,CAAA;AAAA,QAEpB,IAAA,EAAK,aAAA;AAAA,QACL,eAAA,EAAe,KAAA;AAAA,QACf,eAAA,EAAe,CAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QAGf,QAAA,kBAAAJ,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW;AAAA;AAAA,YAAA,EAEPE,cAAAA,CAAc,OAAO,CAAC;AAAA,UAAA,CAAA;AAAA,YAE1B,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA;AACnC;AAAA,KACF;AAAA,IAGC,SAAA,oBACCD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4DAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,MAAE;AAAA,KAAA,EAC1B;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAkBA,IAAM,gBAAgB,CAAC,QAAA,EAAU,UAAU,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAM1E,SAAS,OAAA,CAAQ,EAAE,IAAA,GAAO,EAAA,EAAI,YAAY,EAAA,EAAI,SAAA,GAAY,OAAM,EAAiB;AACtF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIc,OAAAA,CAAM,SAAS,CAAC,CAAA;AAEpD,EAAAA,OAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,aAAA,CAAc,CAAC,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,MAAA,aAAA,CAAc,CAAC,IAAA,KAAA,CAAU,IAAA,GAAO,CAAA,IAAK,cAAc,MAAM,CAAA;AAAA,IAC3D,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,QAAA,GAAW,IAAA;AACjB,EAAA,MAAM,WAAA,GAAc,SAAA,GAAY,QAAA,GAAW,aAAA,CAAc,UAAU,CAAA;AAEnE,EAAA,uBACEf,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,iDAAiD,SAAS,CAAA,CAAA;AAAA,MACrE,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,QAAA;AAAA,QACA,UAAA,EAAY,sBAAA;AAAA,QACZ,UAAA,EAAY;AAAA,OACd;AAAA,MACA,YAAA,EAAY,YAAY,WAAA,GAAc,SAAA;AAAA,MACtC,IAAA,EAAK,QAAA;AAAA,MAEJ,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AClHO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,WAAA;AAAA,EACd,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIU,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAeC,OAAuB,IAAI,CAAA;AAGhD,EAAAC,UAAU,MAAM;AACd,IAAA,SAAS,mBAAmB,KAAA,EAAmB;AAC7C,MAAA,IAAI,YAAA,CAAa,WAAW,CAAC,YAAA,CAAa,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAAG;AAChF,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB;AAAA,IACF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAiB,OAAA,CAAQ,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,UAAU,KAAK,CAAA;AAE9D,EAAA,MAAM,YAAA,GAAe,CAAC,WAAA,KAAwB;AAC5C,IAAA,QAAA,GAAW,WAAW,CAAA;AACtB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACEX,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,WAAW,CAAA,SAAA,EAAY,SAAA,GAAY,QAAA,GAAW,OAAO,IAAI,SAAS,CAAA,CAAA;AAAA,MAGlE,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAS,MAAM,CAAC,QAAA,IAAY,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,YAC7C,QAAA;AAAA,YACA,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAMP,KAAA,GAAQ,wBAAwB,qBAAqB;AAAA,UAAA,EACrD,QAAA,GAAW,kCAAkC,gBAAgB;AAAA,UAAA,EAC7D,MAAA,GAAS,kEAAkE,8CAA8C;AAAA,QAAA,CAAA;AAAA,YAG7H,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,cAAA,GAAiB,yBAAyB,yBAAA,EACxD,QAAA,EAAA,cAAA,EAAgB,SAAS,WAAA,EAC5B,CAAA;AAAA,8BACAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,wBAAwB,MAAA,GAAS,YAAA,GAAe,EAAE,CAAA,CAAA,EAAI,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA;AAAA,SAC1E;AAAA,QAGC,0BACCA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAAA;AAAA,YASV,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAS,MAAM,CAAC,OAAO,QAAA,IAAY,YAAA,CAAa,OAAO,KAAK,CAAA;AAAA,gBAC5D,UAAU,MAAA,CAAO,QAAA;AAAA,gBACjB,SAAA,EAAW;AAAA;AAAA;AAAA,gBAAA,EAGP,MAAA,CAAO,KAAA,KAAU,KAAA,GAAQ,wCAAA,GAA2C,sBAAsB;AAAA,gBAAA,EAC1F,MAAA,CAAO,QAAA,GAAW,+BAAA,GAAkC,wCAAwC;AAAA,cAAA,CAAA;AAAA,gBAG/F,QAAA,EAAA,MAAA,CAAO;AAAA,eAAA;AAAA,cAXH,MAAA,CAAO;AAAA,aAaf;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AC7FA,IAAMI,WAAAA,GAAmE;AAAA,EACvE,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO;AAAA;AAEX,CAAA;AASO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,IAAA,GAAO,CAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,KAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAgB;AACd,EAAA,MAAM,QAAA,GAAWO,OAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,MAAA,GAASN,YAAW,IAAI,CAAA;AAG9B,EAAA,MAAM,UAAA,GAAA,CAAe,KAAA,GAAQ,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAA,GAAQ,GAAA;AAGnD,EAAA,MAAM,UAAA,GAAaU,WAAAA,CAAY,CAAC,GAAA,KAAgB;AAC9C,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAA,CAAO,MAAM,GAAA,IAAO,IAAI,IAAI,IAAA,GAAO,GAAA;AACxD,IAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,OAAO,CAAC,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,GAAA,EAAK,GAAA,EAAK,IAAI,CAAC,CAAA;AAGnB,EAAA,MAAM,oBAAA,GAAuBA,WAAAA,CAAY,CAAC,OAAA,KAAoB;AAC5D,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAS,OAAO,KAAA;AAE9B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,qBAAA,EAAsB;AACpD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAC3E,IAAA,MAAM,QAAA,GAAW,GAAA,GAAM,OAAA,IAAW,GAAA,GAAM,GAAA,CAAA;AACxC,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B,GAAG,CAAC,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,UAAU,CAAC,CAAA;AAGhC,EAAA,MAAM,iBAAA,GAAoBA,WAAAA,CAAY,CAAC,CAAA,KAA0B;AAC/D,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,CAAA,CAAE,OAAO,CAAA;AAC/C,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,QAAA,EAAU,oBAAA,EAAsB,QAAQ,CAAC,CAAA;AAE7C,EAAAF,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAoB;AAC7C,MAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,CAAA,CAAE,OAAO,CAAA;AAC/C,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,eAAe,iBAAiB,CAAA;AAC1D,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,eAAe,CAAA;AAEtD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,eAAe,iBAAiB,CAAA;AAC7D,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAAA,IAC3D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,oBAAA,EAAsB,QAAQ,CAAC,CAAA;AAG/C,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,QAAQ,EAAE,GAAA;AAAK,MACb,KAAK,YAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,GAAQ,IAAI,CAAA;AACrC,QAAA;AAAA,MACF,KAAK,WAAA;AAAA,MACL,KAAK,WAAA;AACH,QAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,GAAQ,IAAI,CAAA;AACrC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,QAAA,GAAW,GAAA;AACX,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,QAAA,GAAW,GAAA;AACX,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AAGJ,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACEX,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,aAAa,SAAS,CAAA,CAAA,CAAG,MAAK,EAE1C,QAAA,EAAA;AAAA,IAAA,CAAA,KAAA,IAAS,SAAA,qBACTA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAED,6BACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDACb,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAIFC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,QAC1B,eAAA,EAAe,GAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QACf,eAAA,EAAe,KAAA;AAAA,QACf,eAAA,EAAe,QAAA;AAAA,QACf,aAAA,EAAe,iBAAA;AAAA,QACf,SAAA,EAAW,aAAA;AAAA,QACX,SAAA,EAAW;AAAA;AAAA;AAAA,UAAA,EAGP,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,UAAA,EAIZ,QAAA,GAAW,kCAAkC,gBAAgB;AAAA;AAAA,QAAA,CAAA,CAE/D,IAAA,EAAK;AAAA,QAGP,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAAA,CAKT,IAAA,EAAK;AAAA,cACP,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA,WACnC;AAAA,0BAGAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,+DAAA;AAAA,cACV,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,KAAA,EAAQ,UAAU,CAAA,IAAA,EAAO,QAAA,CAAS,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,GAAI,CAAC,CAAA,GAAA,CAAA,EAAM;AAAA,cAGxG,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW;AAAA,cAAA,EACP,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,cAAA,EAIZ,UAAA,GAAa,cAAc,EAAE;AAAA;AAAA;AAAA,YAAA,CAAA,CAG/B,IAAA;AAAK;AAAA;AACT;AAAA;AACF;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACjMA,IAAMI,WAAAA,GAAsF;AAAA,EAC1F,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW;AAAA;AAEf,CAAA;AASO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,KAAA;AAAA,EACA,aAAA,GAAgB,OAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,MAAA,GAASA,YAAW,IAAI,CAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,EAAA,IAAM,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAEpE,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,CAAS,CAAC,OAAO,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,EAAY;AAAA,IACd;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gCACJJ,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,EAAA,EAAI,QAAA;AAAA,MACJ,cAAA,EAAc,OAAA;AAAA,MACd,QAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW;AAAA;AAAA,QAAA,EAEP,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,QAAA,EAIZ,OAAA,GAAU,sBAAsB,oBAAoB;AAAA,QAAA,EACpD,QAAA,GAAW,kCAAkC,gBAAgB;AAAA;AAAA,MAAA,CAAA,CAE/D,IAAA,EAAK;AAAA,MAGP,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW;AAAA,UAAA,EACP,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAKZ,OAAA,GAAU,MAAA,CAAO,SAAA,GAAY,iBAAiB;AAAA,QAAA,CAAA,CAChD,IAAA,EAAK;AAAA,UACP,aAAA,EAAY;AAAA;AAAA;AACd;AAAA,GACF;AAGF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAuB,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,EACnD;AAEA,EAAA,uBACEC,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kCAAkC,SAAS,CAAA,CAAA,CAAG,MAAK,EAChE,QAAA,EAAA;AAAA,IAAA,aAAA,KAAkB,0BACjBD,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAW;AAAA;AAAA,YAAA,EAEP,QAAA,GAAW,kCAAkC,gBAAgB;AAAA,UAAA,CAAA,CAC/D,IAAA,EAAK;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IAGD,aAAA;AAAA,IAEA,aAAA,KAAkB,2BACjBA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAW;AAAA;AAAA,YAAA,EAEP,QAAA,GAAW,kCAAkC,gBAAgB;AAAA,UAAA,CAAA,CAC/D,IAAA,EAAK;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACtFA,IAAM,WAAA,GAAcQ,cAAuC,IAAI,CAAA;AAE/D,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,OAAA,GAAUC,WAAW,WAAW,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT;AASA,IAAM,iBAAA,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAiB1B,IAAM,UAAA,GAAa;AAAA,EACjB,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMV,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAMV,CAAA;AAMA,IAAM,UAAA,GAAa;AAAA,EACjB,QAAA,EAAU;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAIV,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASV,CAAA;AAUO,SAAS,IAAA,CAAK;AAAA,EACnB,YAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,MAAA,GAAS,aAAA;AAAA,EACT,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAc;AAEZ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,QAAAA,CAAS,gBAAgB,EAAE,CAAA;AAGrE,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,eAAe,KAAA,GAAQ,aAAA;AAEzC,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAqB;AACzC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,GAAgB,QAAQ,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AAEA,EAAA,uBACEV,GAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAO,EAAE,SAAA,EAAW,YAAA,EAAc,OAAA,EAAS,QAAO,EACtE,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EACF,UACH,CAAA,EACF,CAAA;AAEJ;AAKO,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAAiB;AAClE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,cAAA,EAAe;AAGlC,EAAA,MAAM,WAAA,GAAc,MAAA,KAAW,aAAA,GAAgB,UAAA,GAAa,EAAA;AAE5D,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,qGAAqG,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAE3I,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACZ,UACH,CAAA,EACF,CAAA;AAEJ;AAKO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAoB;AAClB,EAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,OAAA,KAAY,cAAA,EAAe;AAC5D,EAAA,MAAM,WAAW,SAAA,KAAc,KAAA;AAE/B,EAAA,MAAM,YAAA,GAAe,OAAA,KAAY,MAAA,GAC5B,QAAA,GAAW,UAAA,CAAW,MAAA,GAAS,UAAA,CAAW,QAAA,GAC1C,QAAA,GAAW,UAAA,CAAW,MAAA,GAAS,UAAA,CAAW,QAAA;AAE/C,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,iBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,CACG,KAAK,GAAG,CAAA,CACR,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AAER,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MACjC,SAAA,EAAW,OAAA;AAAA,MAGV,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ;AAKO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAoB;AAClB,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,cAAA,EAAe;AAE9C,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAA,GAAiB,OAAA,KAAY,MAAA,GAC/B,CAAA,gDAAA,EAAmD,SAAS,CAAA,CAAA,GAC5D,SAAA;AAEJ,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,cAAA;AAAA,MACX,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAO;AAAA,MAEvB;AAAA;AAAA,GACH;AAEJ;ACzOA,IAAM,cAAA,GAAkD;AAAA,EACtD,GAAA,EAAK,4CAAA;AAAA,EACL,MAAA,EAAQ,yCAAA;AAAA,EACR,IAAA,EAAM,0CAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,WAAA,GAA+C;AAAA,EACnD,GAAA,EAAK,8HAAA;AAAA,EACL,MAAA,EAAQ,iIAAA;AAAA,EACR,IAAA,EAAM,8HAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAMA,IAAMI,WAAAA,GAA0C;AAAA,EAC9C,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AASO,SAAS,OAAA,CAAQ;AAAA,EACtB,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,CAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIM,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaC,OAA6C,IAAI,CAAA;AAEpE,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,UAAA,CAAW,UAAU,UAAA,CAAW,MAAM,YAAA,CAAa,IAAI,GAAG,KAAK,CAAA;AAAA,IACjE,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,IACjC;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEV,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,wBAAwB,SAAS,CAAA,CAAA;AAAA,MAC5C,YAAA,EAAc,WAAA;AAAA,MACd,YAAA,EAAc,WAAA;AAAA,MACd,OAAA,EAAS,WAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MAEP,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAEA,6BACCA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAQPG,WAAAA,CAAW,IAAI,CAAC;AAAA,YAAA,EAChB,cAAA,CAAe,QAAQ,CAAC;AAAA,UAAA,CAAA;AAAA,YAE5B,IAAA,EAAK,SAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,cAAA,OAAA;AAAA,8BAEDJ,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW;AAAA;AAAA;AAAA,cAAA,EAGP,WAAA,CAAY,QAAQ,CAAC;AAAA,YAAA;AAAA;AAAA;AAE3B;AAAA;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AC9FA,IAAM,YAAA,GAAeQ,cAAwC,IAAI,CAAA;AAE1D,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,OAAA,GAAUC,WAAW,YAAY,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;AAiBO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,eAAA,GAAkB,GAAA;AAAA,EAClB,UAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,QAAAA,CAAsB,EAAE,CAAA;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE5C,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAWE,WAAAA,CAAY,CAAC,KAAA,KAAiC;AAC7D,IAAA,MAAM,EAAA,GAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACrE,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,eAAA;AAEnC,IAAA,SAAA,CAAU,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,EAAA,EAAI,CAAC,CAAA;AAG/C,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAAA,MACrD,GAAG,QAAQ,CAAA;AAAA,IACb;AAEA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,WAAA,GAAcA,WAAAA,CAAY,CAAC,EAAA,KAAe;AAC9C,IAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAAA,EACrD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEb,IAAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAY,EAC3D,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,OAAA,IAAWkB,YAAAA;AAAA,sBACVnB,GAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,WAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACF,CAAA;AAEJ;AAaA,SAAS,cAAc,EAAE,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAY,iBAAgB,EAAuB;AAC/F,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEhC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,wFAAA;AAAA,MACV,WAAA,EAAU,QAAA;AAAA,MAET,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,OAAA,EAAS,MAAM,WAAA,CAAY,KAAA,CAAM,EAAE,CAAA;AAAA,UACnC,UAAA;AAAA,UACA;AAAA,SAAA;AAAA,QAJK,KAAA,CAAM;AAAA,OAMd;AAAA;AAAA,GACH;AAEJ;AAMA,IAAME,cAAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,wCAAA;AAAA,EACT,OAAA,EAAS,yCAAA;AAAA,EACT,OAAA,EAAS,2CAAA;AAAA,EACT,KAAA,EAAO,qCAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AASA,SAAS,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,iBAAgB,EAAe;AAC1E,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,IAAW,SAAA;AAGjC,EAAA,MAAM,cAAc,KAAA,CAAM,IAAA,KAAS,UAAA,GAAa,UAAA,CAAW,OAAO,CAAA,GAAI,IAAA,CAAA;AAEtE,EAAA,uBACEF,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAOPE,cAAAA,CAAc,OAAO,CAAC;AAAA,MAAA,CAAA,CACxB,IAAA,EAAK;AAAA,MACP,IAAA,EAAK,OAAA;AAAA,MAEL,QAAA,kBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,WAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBAIFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAA,EACV,gBAAM,KAAA,EACT,CAAA;AAAA,UACC,KAAA,CAAM,+BACLA,GAAAA,CAAC,OAAE,SAAA,EAAU,sDAAA,EACV,gBAAM,WAAA,EACT;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAGAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,wEAAA;AAAA,YACV,YAAA,EAAW,OAAA;AAAA,YAEV,QAAA,EAAA,eAAA,GAAkB,eAAA,EAAgB,mBACjCA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAM,4BAAA;AAAA,gBAEN,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,sBAAA;AAAA,oBACF,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF;AAAA;AAEJ,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AC5LO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,WAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAmB;AACjB,EAAA,MAAM,QAAA,GAAWW,OAAuB,IAAI,CAAA;AAG5C,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,MAAA,EAAQ;AAChC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AACjD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAGpB,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,IAAI,QAAA,CAAS,WAAW,CAAC,QAAA,CAAS,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,IAAK,MAAA,EAAQ;AAC9E,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM;AACjC,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AAAA,IAC3D,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,uBACEZ,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA;AAAA,MAMX,QAAA,kBAAAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAOP,SAAS;AAAA,QAAA,CAAA;AAAA,UAIb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,cACC,WAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,SAAS,SAAA,EAAU,gBAAA,EAC/B,QAAA,EAAA,WAAA,EACH,CAAA,mBAEAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,OAAA;AAAA,kBACT,SAAA,EAAU,wDAAA;AAAA,kBACV,YAAA,EAAW,kBAAA;AAAA,kBAEX,QAAA,kBAAAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAM,IAAA;AAAA,sBACN,MAAA,EAAO,IAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,KAAA,EAAM,4BAAA;AAAA,sBAEN,QAAA,kBAAAA,GAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,CAAA,EAAE,sBAAA;AAAA,0BACF,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF;AAAA;AACF,aAAA,EAEJ,CAAA;AAAA,4BAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACZ,QAAA,EACH,CAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;ACrHA,IAAM,cAAA,GAAiBQ,cAA0C,IAAI,CAAA;AAErE,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAM,OAAA,GAAUC,WAAW,cAAc,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,OAAA;AACT;AAmBO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAC7C,EAAA,MAAM,UAAA,GAAaC,OAAoB,IAAI,CAAA;AAE3C,EAAA,MAAM,OAAA,GAAUG,WAAAA,CAAY,CAAC,OAAA,KAAqB;AAChD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACEd,GAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,QAAA,EAAS,EACnE,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAwB;AACzE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,KAAe,iBAAA,EAAkB;AAExD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA+F;AAAA,MACvH,OAAA,EAAS,WAAA;AAAA,MACT,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,GAAA,EAAK,UAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MAER;AAAA;AAAA,GACH;AAEJ;AAeO,SAAS,eAAe,EAAE,SAAA,GAAY,IAAI,QAAA,EAAU,KAAA,GAAQ,UAAS,EAAwB;AAClG,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,QAAA,KAAa,iBAAA,EAAkB;AAClE,EAAA,MAAM,UAAA,GAAaW,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAS,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,CAAA;AAExD,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAW,OAAA,IAAW,CAAC,WAAW,OAAA,EAAS;AAEzD,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB;AACzD,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB;AACzD,IAAA,MAAM,GAAA,GAAM,CAAA;AAEZ,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,IAAA,GAAO,CAAA;AAEX,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,KAAA;AACH,QAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,MAAA,GAAS,GAAA;AACrC,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAA,CAAQ,OAAA,CAAQ,KAAA,GAAQ,QAAQ,KAAA,IAAS,CAAA;AACxD,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,GAAA,GAAM,QAAQ,MAAA,GAAS,GAAA;AACvB,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAA,CAAQ,OAAA,CAAQ,KAAA,GAAQ,QAAQ,KAAA,IAAS,CAAA;AACxD,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACxD,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,KAAA,GAAQ,GAAA;AACtC,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACxD,QAAA,IAAA,GAAO,QAAQ,KAAA,GAAQ,GAAA;AACvB,QAAA;AAAA;AAIJ,IAAA,IAAI,QAAA,KAAa,KAAA,IAAS,QAAA,KAAa,QAAA,EAAU;AAC/C,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,IAAA,GAAO,OAAA,CAAQ,IAAA;AAAA,MACjB,CAAA,MAAA,IAAW,UAAU,KAAA,EAAO;AAC1B,QAAA,IAAA,GAAO,OAAA,CAAQ,QAAQ,OAAA,CAAQ,KAAA;AAAA,MACjC;AAAA,IACF;AAGA,IAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAC,CAAA;AACxE,IAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,UAAA,GAAa,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAC,CAAA;AAExE,IAAA,SAAA,CAAU,EAAE,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,EACzB,GAAG,CAAC,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,UAAU,CAAC,CAAA;AAGtC,EAAA,eAAA,CAAgB,IAAA,EAAM,CAAC,UAAA,EAAY,UAAU,GAAG,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAGpE,EAAA,YAAA,CAAa,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM,OAAO,IAAA;AAE9B,EAAA,OAAOO,YAAAA;AAAA,oBACLnB,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAQP,SAAS;AAAA,MAAA,CAAA,CACX,IAAA,EAAK;AAAA,QACP,OAAO,EAAE,GAAA,EAAK,OAAO,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,QAE3C;AAAA;AAAA,KACH;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AC1LA,IAAM,YAAA,GAAeQ,cAAwC,IAAI,CAAA;AAEjE,SAAS,eAAA,GAAkB;AACzB,EAAA,MAAM,OAAA,GAAUC,WAAW,YAAY,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;AAmBO,SAAS,KAAA,CAAM;AAAA,EACpB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP;AACF,CAAA,EAAe;AACb,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAE7C,EAAA,MAAM,OAAA,GAAUI,WAAAA,CAAY,CAAC,OAAA,KAAqB;AAChD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACEd,GAAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK,EACjD,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAsB;AACrE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,eAAA,EAAgB;AAEpC,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA0D;AAAA,MAClF,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI;AAAA,KAC5B,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,IAAI,CAAA,EAC9C,QAAA,EACH,CAAA;AAEJ;AAMA,IAAM,UAAA,GAAqF;AAAA,EACzF,IAAA,EAAM;AAAA,IACJ,SAAA,EAAW,2CAAA;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,4CAAA;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW,0CAAA;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,SAAA,EAAW,6CAAA;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAA;AASO,SAAS,YAAA,CAAa,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAsB;AAC5E,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,KAAS,eAAA,EAAgB;AAChD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIU,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAE9B,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA,MAAO;AAEL,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB,GAAG,GAAG,CAAA;AACN,MAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,YAAA,CAAa,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAGvC,EAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,SAAA,EAAW,OAAO,IAAA;AAEnC,EAAA,OAAOO,YAAAA;AAAA,oBACLlB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW;AAAA;AAAA;AAAA,UAAA,EAGP,IAAA,GAAO,gBAAgB,WAAW;AAAA,QAAA,CAAA,CACpC,IAAA,EAAK;AAAA,UACP,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,UAC5B,aAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBAGAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW;AAAA;AAAA,UAAA,EAEP,OAAO,SAAS;AAAA;AAAA;AAAA,UAAA,EAGhB,IAAA,KAAS,MAAA,GAAS,YAAA,GAAe,EAAE;AAAA,UAAA,EACnC,IAAA,KAAS,OAAA,GAAU,YAAA,GAAe,EAAE;AAAA,UAAA,EACpC,IAAA,KAAS,KAAA,GAAQ,YAAA,GAAe,EAAE;AAAA,UAAA,EAClC,IAAA,KAAS,QAAA,GAAW,YAAA,GAAe,EAAE;AAAA;AAAA;AAAA,UAAA,EAGrC,IAAA,GAAO,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,MAAM;AAAA,UAAA,EAClC,SAAS;AAAA,QAAA,CAAA,CACX,IAAA,EAAK;AAAA,UAEN;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAaO,SAAS,WAAA,CAAY,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAqB;AAC1E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kDAAkD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAChF,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,UAAA,CAAW,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAoB;AACxE,EAAA,uBACEA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAW,yDAAyD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACtF,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,gBAAA,CAAiB,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAA0B;AACpF,EAAA,uBACEA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,wDAAwD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACpF,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,SAAA,CAAU,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAmB;AACtE,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kCAAkC,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAChE,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,WAAA,CAAY,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAqB;AAC1E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yEAAyE,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACvG,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,UAAA,CAAW,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAoB;AACjE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,eAAA,EAAgB;AAEpC,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA0D;AAAA,MAClF,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK;AAAA,KAC7B,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAC/C,QAAA,EACH,CAAA;AAEJ;ACnQA,IAAM,aAAA,GAAgB;AAAA;AAAA;AAAA,CAAA;AAKtB,IAAM,YAAA,GAAe;AAAA;AAAA,CAAA;AAIrB,IAAM,aAAA,GAAgB;AAAA;AAAA,CAAA;AAItB,IAAM,mBAAA,GAAsB;AAAA;AAAA,CAAA;AAI5B,IAAM,YAAA,GAAe;AAAA;AAAA,CAAA;AAkBd,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA,GAAQ,aAAA;AAAA,EACR,UAAA,GAAa,eAAA;AAAA,EACb,SAAA,GAAY;AACd,CAAA,EAA2B;AACzB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAGpB,EAAA,MAAM,iBAAA,GAAoB,UAAA,IACxB,CAAC,GAAG,IAAI,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA,CAAE,IAAI,CAAA,GAAA,MAAQ;AAAA,IACxD,EAAA,EAAI,GAAA;AAAA,IACJ,KAAA,EAAO,IAAI,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,GAAA,CAAI,KAAA,CAAM,CAAC;AAAA,GAClD,CAAE,CAAA;AAGJ,EAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,IACrD,QAAA,EAAU,GAAA;AAAA,IACV,QAAQ,UAAA,CAAW,MAAA,CAAO,OAAK,CAAA,CAAE,QAAA,KAAa,IAAI,EAAE;AAAA,IACpD,CAAA,CAAE,MAAA,CAAO,WAAS,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AAE3C,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,KAA6B;AACtD,IAAA,MAAM,QAAA,GAAW,oBAAoB,GAAA,CAAI,EAAA;AACzC,IAAA,uBACEC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,MAAM,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AAAA,QACnC,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA,UAAA,EAKP,QAAA,GACI,2CACA,iDACN;AAAA,QAAA,CAAA;AAAA,QAGD,QAAA,EAAA;AAAA,UAAA,GAAA,CAAI,wBAAQD,GAAAA,CAAC,UAAK,SAAA,EAAU,SAAA,EAAW,cAAI,IAAA,EAAK,CAAA;AAAA,0BACjDC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACZ,cAAI,IAAA,EACP,CAAA;AAAA,4BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,cAAI,WAAA,EACP;AAAA,WAAA,EACF,CAAA;AAAA,UACC,4BAAYA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,QAAA,EAAQ;AAAA;AAAA,OAAA;AAAA,MAtB1C,GAAA,CAAI;AAAA,KAuBX;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAAmB,QAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAApB,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oBAAA;AAAA,QACV,OAAA,EAAS;AAAA;AAAA,KACX;AAAA,oBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAEnD,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EACd,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EAAkC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBACxDA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,QAAA,EAAQ,IAAA;AAAA,YACR,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAW,OAAA;AAAA,YACZ,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,sBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eACb,QAAA,EAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,EAAE,QAAA,EAAU,MAAA,EAAO,qBACxCC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,mBAAA,EACb,mBAAS,KAAA,EACZ,CAAA;AAAA,wBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,iBAAiB,CAAA,EAC/B;AAAA,OAAA,EAAA,EANQ,QAAA,CAAS,EAOnB,CACD,CAAA,EACH,CAAA;AAAA,MAGC,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EACd,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACZ,QAAA,EAAA,UAAA,EACH,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACvJA,IAAMG,WAAAA,GAAa;AAAA;AAAA,CAAA;AAInB,IAAMD,cAAAA,GAQD;AAAA,EACH,OAAA,EAAS;AAAA,IACP,SAAA,EAAW,8DAAA;AAAA,IACX,KAAA,EAAO,gDAAA;AAAA,IACP,KAAA,EAAO,wCAAA;AAAA,IACP,OAAA,EAAS,yCAAA;AAAA,IACT,KAAA,EAAO,yDAAA;AAAA,IACP,IAAA,EAAM,6DAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAW,oEAAA;AAAA,IACX,KAAA,EAAO,iDAAA;AAAA,IACP,KAAA,EAAO,0CAAA;AAAA,IACP,OAAA,EAAS,yCAAA;AAAA,IACT,KAAA,EAAO,wDAAA;AAAA,IACP,IAAA,EAAM,sDAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,0EAAA;AAAA,IACX,KAAA,EAAO,gDAAA;AAAA,IACP,KAAA,EAAO,wCAAA;AAAA,IACP,OAAA,EAAS,0GAAA;AAAA,IACT,KAAA,EAAO,yDAAA;AAAA,IACP,IAAA,EAAM,0DAAA;AAAA,IACN,SAAA,EAAW;AAAA;AAEf,CAAA;AAMA,SAAS,iBAAiB,OAAA,EAAuC;AAC/D,EAAA,MAAM,MAAM,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,QAAQ,OAAA,EAAQ;AACpE,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,GAAA,GAAM,IAAA,CAAK,KAAK,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,MAAQ,EAAE,CAAA;AAC9C,EAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,GAAA,GAAO,KAAM,EAAE,CAAA;AACnD,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAO,SAAS,GAAA,GAAO,EAAA,GAAK,MAAO,EAAE,CAAA;AACxD,EAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,GAAO,EAAA,GAAK,KAAK,EAAA,CAAG,CAAA;AAErD,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,SAAS,KAAA,EAAM;AAChD;AAEA,SAAS,SAAA,CACP,SACA,SAAA,EACiB;AACjB,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,MAAM,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,QAAQ,OAAA,EAAQ;AACpE,EAAA,MAAM,KAAA,GAAQ,YACV,OAAO,SAAA,KAAc,WACnB,SAAA,GACA,SAAA,CAAU,SAAQ,GACpB,GAAA;AAEJ,EAAA,IAAI,GAAA,GAAM,OAAO,OAAO,UAAA;AACxB,EAAA,IAAI,GAAA,IAAO,KAAK,OAAO,OAAA;AACvB,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,QAAQ,GAAA,EAAqB;AACpC,EAAA,OAAO,GAAA,CAAI,QAAA,EAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACvC;AAeO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,KAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,OAAA;AAAA,EACf,eAAA,GAAkB,eAAA;AAAA,EAClB,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY;AACd,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIQ,QAAAA;AAAA,IAAwB,MAChE,iBAAiB,OAAO;AAAA,GAC1B;AACA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA;AAAA,IAA0B,MACpD,SAAA,CAAU,OAAA,EAAS,SAAS;AAAA,GAC9B;AAEA,EAAA,MAAM,UAAA,GAAaI,YAAY,MAAM;AACnC,IAAA,MAAM,OAAA,GAAU,iBAAiB,OAAO,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,OAAA,EAAS,SAAS,CAAA;AAE9C,IAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,IAAI,SAAA,KAAc,WAAW,UAAA,EAAY;AACvC,MAAA,UAAA,EAAW;AAAA,IACb;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,SAAA,EAAW,UAAU,CAAC,CAAA;AAEnC,EAAAF,UAAU,MAAM;AACd,IAAA,UAAA,EAAW;AAEX,IAAA,IAAI,WAAW,OAAA,EAAS;AAExB,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,UAAA,EAAY,GAAI,CAAA;AAC7C,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AAEvB,EAAA,MAAM,MAAA,GAASV,eAAc,OAAO,CAAA;AAGpC,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAGE,WAAU,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAC3D,QAAA,EAAA;AAAA,MAAA,KAAA,oBAASH,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC7CA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,CAAA,aAAA,EAAgB,OAAA,KAAY,OAAA,GAAU,SAAA,GAAY,OAAA,KAAY,SAAA,GAAY,SAAA,GAAY,SAAS,4BAC1G,QAAA,EAAA,YAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,MAAA,KAAW,cAAc,SAAA,EAAW;AACtC,IAAA,MAAM,cAAA,GAAiB,iBAAiB,SAAS,CAAA;AACjD,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAGE,WAAU,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAC5D,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,MAAA,CAAO,OAAO,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sBACrCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,KAAA,EACpB,QAAA,EAAA;AAAA,QAAA,QAAA,IAAY,eAAe,IAAA,GAAO,CAAA,oBACjCA,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,0BAAAnB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,OAAA,EACrB,QAAA,EAAA;AAAA,4BAAAD,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,KAAA,EAAQ,yBAAe,IAAA,EAAK,CAAA;AAAA,4BACpDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,MAAA,EAAI;AAAA,WAAA,EACpC,CAAA;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC;AAAA,SAAA,EACtC,CAAA;AAAA,wBAEFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,cAAA,CAAe,KAAK,CAAA,EAAE,CAAA;AAAA,0BAC9DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,SAAA,EACnC,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,wBACpCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA,EAAE,CAAA;AAAA,0BAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,SAAA,EACnC,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,wBACpCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA,EAAE,CAAA;AAAA,0BAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,SAAA,EACnC;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAGE,WAAU,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAC3D,QAAA,EAAA;AAAA,IAAA,KAAA,oBAASH,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC7CC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,KAAA,EACpB,QAAA,EAAA;AAAA,MAAA,QAAA,IAAY,cAAc,IAAA,GAAO,CAAA,oBAChCA,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAnB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,OAAA,EACrB,QAAA,EAAA;AAAA,0BAAAD,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,KAAA,EAAQ,wBAAc,IAAA,EAAK,CAAA;AAAA,0BACnDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,MAAA,EAAI;AAAA,SAAA,EACpC,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EACtC,CAAA;AAAA,sBAEFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAE,CAAA;AAAA,wBAC7DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,OAAA,EACnC,CAAA;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACpCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,aAAA,CAAc,OAAO,CAAA,EAAE,CAAA;AAAA,wBAC/DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,OAAA,EACnC,CAAA;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAW,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACpCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,OAAA,EACrB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,MAAA,CAAO,OAAQ,QAAA,EAAA,OAAA,CAAQ,aAAA,CAAc,OAAO,CAAA,EAAE,CAAA;AAAA,wBAC/DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,MAAM,QAAA,EAAA,KAAA,EAAG;AAAA,OAAA,EACnC;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACzPA,SAAS,cAAc,OAAA,EAA4C;AACjE,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AACrB,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,EAAA,EAAI,OAAO,OAAA;AACjC,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AACtD;AAmDO,SAAS,aAAA,CAAc;AAAA,EAC5B,WAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAuB;AACrB,EAAA,uBACEC,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,8GAA8G,SAAS,CAAA,CAAA,CAAG,MAAK,EAE7I,QAAA,EAAA;AAAA,oBAAAD,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA,CAAC,8BACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,WAAW,QAAA,EAAA,SAAA,EAAO,CAAA,mBAEnCC,IAAAA,CAAAmB,UAAA,EAEG,QAAA,EAAA;AAAA,MAAA,aAAA,oBACCpB,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wCAAA,EAA0C,QAAA,EAAA,aAAA,CAAc,aAAa,CAAA,EAAE,CAAA;AAAA,MAGxF,gCACCA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAS,YAAA;AAAA,UACT,KAAA,EAAM;AAAA;AAAA;AACR,KAAA,EAEJ,CAAA,EAEJ,CAAA;AAAA,IAGC,eAAe,QAAA,oBACdA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACZ,QAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACrFA,IAAM,aAAA,GAAgBQ,cAAyC,IAAI,CAAA;AAEnE,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,OAAA,GAAUC,WAAW,aAAa,CAAA;AACxC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,OAAA;AACT;AAiBO,SAAS,MAAA,CAAO;AAAA,EACrB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAE7C,EAAA,MAAM,OAAA,GAAUI,WAAAA,CAAY,CAAC,OAAA,KAAqB;AAChD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,uBACEd,GAAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,OAAO,EAAE,IAAA,EAAM,OAAA,EAAQ,EAC5C,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAuB;AACvE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,gBAAA,EAAiB;AAErC,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA0D;AAAA,MAClF,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI;AAAA,KAC5B,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,IAAI,CAAA,EAC9C,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,aAAA,CAAc,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAuB;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,gBAAA,EAAiB;AAC3C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIU,SAAS,KAAK,CAAA;AAE5C,EAAAE,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,YAAA,CAAa,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAGvC,EAAA,iBAAA,CAAkB,IAAI,CAAA;AAEtB,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM,OAAO,IAAA;AAE9B,EAAA,OAAOO,YAAAA;AAAA,oBACLlB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAEb,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,yDAAA;AAAA,UACV,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,UAC5B,aAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBAGAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAQP,SAAS;AAAA,QAAA,CAAA,CACX,IAAA,EAAK;AAAA,UAEN;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAaO,SAAS,YAAA,CAAa,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAsB;AAC5E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kDAAkD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAChF,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,WAAA,CAAY,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAqB;AAC1E,EAAA,uBACEA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAW,yDAAyD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACtF,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,iBAAA,CAAkB,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAA2B;AACtF,EAAA,uBACEA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,wDAAwD,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACpF,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,UAAA,CAAW,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAoB;AACxE,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,aAAa,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAC3C,QAAA,EACH,CAAA;AAEJ;AASO,SAAS,YAAA,CAAa,EAAE,SAAA,GAAY,EAAA,EAAI,UAAS,EAAsB;AAC5E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yEAAyE,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EACvG,QAAA,EACH,CAAA;AAEJ;AAaO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAqB;AACnE,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,gBAAA,EAAiB;AAErC,EAAA,IAAI,OAAA,IAAWe,OAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAOA,OAAAA,CAAM,aAAa,QAAA,EAA0D;AAAA,MAClF,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK;AAAA,KAC7B,CAAA;AAAA,EACH;AAEA,EAAA,uBACEf,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAC/C,QAAA,EACH,CAAA;AAEJ","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useRef, useEffect } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype AccordionType = 'single' | 'multiple';\n\ninterface AccordionContextValue {\n type: AccordionType;\n expandedItems: Set<string>;\n toggleItem: (value: string) => void;\n}\n\ninterface AccordionItemContextValue {\n value: string;\n isExpanded: boolean;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n}\n\nfunction useAccordionItemContext() {\n const context = useContext(AccordionItemContext);\n if (!context) {\n throw new Error('AccordionTrigger/AccordionContent must be used within an AccordionItem');\n }\n return context;\n}\n\n// ============================================================================\n// Accordion Root\n// ============================================================================\n\ninterface AccordionProps {\n /** Allow single or multiple items to be expanded at once */\n type?: AccordionType;\n /** Default expanded item(s) - string for single, array for multiple */\n defaultValue?: string | string[];\n /** Controlled expanded value(s) */\n value?: string | string[];\n /** Callback when expanded items change */\n onValueChange?: (value: string | string[]) => void;\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function Accordion({\n type = 'single',\n defaultValue,\n value: controlledValue,\n onValueChange,\n className = '',\n children,\n}: AccordionProps) {\n // Initialize expanded items\n const getInitialExpanded = (): Set<string> => {\n const initial = controlledValue ?? defaultValue;\n if (!initial) return new Set();\n return new Set(Array.isArray(initial) ? initial : [initial]);\n };\n\n const [expandedItems, setExpandedItems] = useState<Set<string>>(getInitialExpanded);\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n setExpandedItems(new Set(Array.isArray(controlledValue) ? controlledValue : [controlledValue]));\n }\n }, [controlledValue]);\n\n const toggleItem = useCallback((itemValue: string) => {\n setExpandedItems((prev) => {\n const next = new Set(prev);\n\n if (next.has(itemValue)) {\n next.delete(itemValue);\n } else {\n if (type === 'single') {\n next.clear();\n }\n next.add(itemValue);\n }\n\n // Notify parent of change\n if (onValueChange) {\n const newValue = Array.from(next);\n onValueChange(type === 'single' ? (newValue[0] ?? '') : newValue);\n }\n\n return next;\n });\n }, [type, onValueChange]);\n\n return (\n <AccordionContext.Provider value={{ type, expandedItems, toggleItem }}>\n <div className={`space-y-0 ${className}`}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\n// ============================================================================\n// Accordion Item\n// ============================================================================\n\ninterface AccordionItemProps {\n /** Unique value for this item */\n value: string;\n /** Additional className */\n className?: string;\n /** Children (AccordionTrigger and AccordionContent) */\n children: React.ReactNode;\n}\n\nexport function AccordionItem({ value, className = '', children }: AccordionItemProps) {\n const { expandedItems } = useAccordionContext();\n const isExpanded = expandedItems.has(value);\n\n return (\n <AccordionItemContext.Provider value={{ value, isExpanded }}>\n <div\n className={`\n border border-edge-primary\n bg-surface-primary\n -mt-px first:mt-0\n ${className}\n `.trim()}\n data-state={isExpanded ? 'open' : 'closed'}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n}\n\n// ============================================================================\n// Accordion Trigger\n// ============================================================================\n\ninterface AccordionTriggerProps {\n /** Additional className */\n className?: string;\n /** Children (header content) */\n children: React.ReactNode;\n}\n\nexport function AccordionTrigger({ className = '', children }: AccordionTriggerProps) {\n const { toggleItem } = useAccordionContext();\n const { value, isExpanded } = useAccordionItemContext();\n\n return (\n <button\n type=\"button\"\n onClick={() => toggleItem(value)}\n className={`\n w-full flex items-center justify-between\n px-4 py-3\n font-joystix text-sm uppercase text-content-primary\n bg-transparent\n hover:bg-content-primary/5\n transition-colors\n cursor-pointer\n ${className}\n `.trim()}\n aria-expanded={isExpanded}\n >\n <span>{children}</span>\n <span\n className=\"text-[1rem] font-mondwest select-none\"\n aria-hidden=\"true\"\n >\n {isExpanded ? '−' : '+'}\n </span>\n </button>\n );\n}\n\n// ============================================================================\n// Accordion Content\n// ============================================================================\n\ninterface AccordionContentProps {\n /** Additional className */\n className?: string;\n /** Children (content) */\n children: React.ReactNode;\n}\n\nexport function AccordionContent({ className = '', children }: AccordionContentProps) {\n const { isExpanded } = useAccordionItemContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | undefined>(undefined);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n const content = contentRef.current;\n if (!content) return;\n\n if (isExpanded) {\n // Expanding: measure content height and animate\n const scrollHeight = content.scrollHeight;\n setHeight(scrollHeight);\n setIsAnimating(true);\n\n const timer = setTimeout(() => {\n setIsAnimating(false);\n setHeight(undefined); // Remove fixed height after animation\n }, 200);\n\n return () => clearTimeout(timer);\n } else {\n // Collapsing: set current height first, then animate to 0\n const scrollHeight = content.scrollHeight;\n setHeight(scrollHeight);\n setIsAnimating(true);\n\n // Force reflow before setting height to 0\n requestAnimationFrame(() => {\n setHeight(0);\n });\n\n const timer = setTimeout(() => {\n setIsAnimating(false);\n }, 200);\n\n return () => clearTimeout(timer);\n }\n }, [isExpanded]);\n\n return (\n <div\n ref={contentRef}\n className={`\n overflow-hidden\n transition-[height] duration-200 ease-out\n ${className}\n `.trim()}\n style={{\n height: isAnimating ? height : (isExpanded ? 'auto' : 0),\n }}\n aria-hidden={!isExpanded}\n >\n <div className=\"px-4 pb-4\">\n {children}\n </div>\n </div>\n );\n}\n\nexport default Accordion;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype AlertVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\n\ninterface AlertProps {\n /** Alert variant */\n variant?: AlertVariant;\n /** Alert title */\n title?: string;\n /** Alert content */\n children: React.ReactNode;\n /** Show close button */\n closable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Icon slot - renders before content */\n icon?: React.ReactNode;\n /** Close icon slot - renders for close button */\n closeIcon?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst variantStyles: Record<AlertVariant, string> = {\n default: 'bg-surface-primary border-edge-primary text-content-primary',\n success: 'bg-status-success/10 border-status-success text-content-primary',\n warning: 'bg-status-warning/10 border-status-warning text-content-primary',\n error: 'bg-status-error/10 border-status-error text-content-primary',\n info: 'bg-status-info/10 border-status-info text-content-primary',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Alert component - Static alert banners\n *\n * Uses slot-based API for icons to avoid coupling to specific icon systems.\n * Pass your own icon components via the `icon` and `closeIcon` props.\n */\nexport function Alert({\n variant = 'default',\n title,\n children,\n closable = false,\n onClose,\n icon,\n closeIcon,\n className = '',\n}: AlertProps) {\n return (\n <div\n role=\"alert\"\n className={`\n p-4\n border-2\n rounded-sm\n ${variantStyles[variant]}\n ${className}\n `.trim()}\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon slot */}\n {icon && (\n <span className=\"flex-shrink-0 mt-0.5\">\n {icon}\n </span>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"font-joystix text-xs uppercase mb-1\">\n {title}\n </p>\n )}\n <div className=\"font-mondwest text-base text-content-primary/80\">\n {children}\n </div>\n </div>\n\n {/* Close Button */}\n {closable && (\n <button\n onClick={onClose}\n className=\"text-content-primary/50 hover:text-content-primary flex-shrink-0 -mt-1\"\n aria-label=\"Close\"\n >\n {closeIcon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n )}\n </div>\n </div>\n );\n}\n\nexport default Alert;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\ntype BadgeSize = 'sm' | 'md';\n\ninterface BadgeProps {\n /** Visual variant */\n variant?: BadgeVariant;\n /** Size preset */\n size?: BadgeSize;\n /** Badge content */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Base badge styles\n */\nconst baseStyles = `\n inline-flex items-center justify-center\n font-joystix uppercase\n rounded-sm\n whitespace-nowrap\n`;\n\n/**\n * Size presets\n */\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'px-2 py-0.5 text-2xs',\n md: 'px-2.5 py-1 text-xs',\n};\n\n/**\n * Variant color schemes (using semantic tokens)\n */\nconst variantStyles: Record<BadgeVariant, string> = {\n default: 'bg-surface-primary text-content-primary border border-edge-primary',\n success: 'bg-status-success text-content-primary border border-edge-primary',\n warning: 'bg-status-warning text-content-primary border border-edge-primary',\n error: 'bg-status-error text-content-primary border border-edge-primary',\n info: 'bg-status-info text-content-primary border border-edge-primary',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Badge component for status indicators and labels\n */\nexport function Badge({\n variant = 'default',\n size = 'md',\n children,\n className = '',\n}: BadgeProps) {\n const classes = [\n baseStyles,\n sizeStyles[size],\n variantStyles[variant],\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return (\n <span className={classes}>\n {children}\n </span>\n );\n}\n\nexport default Badge;\n","'use client';\n\nimport React from 'react';\nimport Link from 'next/link';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface BreadcrumbItem {\n /** Display label */\n label: string;\n /** Navigation href (optional for current/last item) */\n href?: string;\n}\n\ninterface BreadcrumbsProps {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n /** Separator character */\n separator?: string;\n /** Additional className */\n className?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Breadcrumbs component - Navigation hierarchy\n */\nexport function Breadcrumbs({\n items,\n separator = '/',\n className = '',\n}: BreadcrumbsProps) {\n if (items.length === 0) return null;\n\n return (\n <nav\n aria-label=\"Breadcrumb\"\n className={`flex items-center gap-2 ${className}`.trim()}\n >\n <ol className=\"flex items-center gap-2\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center gap-2\">\n {/* Separator */}\n {index > 0 && (\n <span\n className=\"font-mondwest text-base text-content-primary/40\"\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n\n {/* Item */}\n {item.href && !isLast ? (\n <Link\n href={item.href}\n className=\"font-mondwest text-base text-content-primary/60 hover:text-content-primary hover:underline transition-colors\"\n >\n {item.label}\n </Link>\n ) : (\n <span\n className={`\n font-mondwest text-base\n ${isLast ? 'text-content-primary font-semibold' : 'text-content-primary/60'}\n `.trim()}\n aria-current={isLast ? 'page' : undefined}\n >\n {item.label}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nexport default Breadcrumbs;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost';\ntype ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface BaseButtonProps {\n /** Visual variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: ButtonSize;\n /** Expand to fill container width */\n fullWidth?: boolean;\n /** Square button with icon only (no text) */\n iconOnly?: boolean;\n /** Show loading state */\n loading?: boolean;\n /** Button content (optional when iconOnly is true) */\n children?: React.ReactNode;\n /** Additional className */\n className?: string;\n /** Icon slot - render your icon component here */\n icon?: React.ReactNode;\n /** Loading indicator slot - render your spinner here */\n loadingIndicator?: React.ReactNode;\n}\n\ninterface ButtonAsButtonProps extends BaseButtonProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof BaseButtonProps> {\n /** URL for navigation - when provided, button can act as a link */\n href?: undefined;\n}\n\ninterface ButtonAsLinkProps extends BaseButtonProps, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof BaseButtonProps> {\n /** URL for navigation - renders as anchor element */\n href: string;\n /** Whether to render as anchor (true) or use window.open (false) */\n asLink?: boolean;\n /** Target for link navigation (e.g., '_blank') */\n target?: string;\n}\n\ntype ButtonProps = ButtonAsButtonProps | ButtonAsLinkProps;\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Base styles applied to all buttons\n * - Retro lift effect with box-shadow\n * - NO transitions (instant state changes)\n */\nconst baseStyles = `\n inline-flex items-center\n font-heading uppercase\n whitespace-nowrap\n cursor-pointer select-none\n border border-edge-primary\n rounded-sm\n shadow-btn\n hover:-translate-y-0.5\n hover:shadow-btn-hover\n active:translate-y-0.5\n active:shadow-none\n disabled:opacity-50 disabled:cursor-not-allowed\n disabled:hover:translate-y-0 disabled:hover:shadow-btn\n focus:outline-none focus-visible:ring-2 focus-visible:ring-edge-focus focus-visible:ring-offset-1\n`;\n\n/**\n * Size presets\n * All buttons use h-8 (2rem) height for consistency\n * Text sizes: sm=12px, md=12px, lg=14px\n */\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: 'h-8 px-3 text-xs gap-3',\n md: 'h-8 px-3 text-xs gap-3',\n lg: 'h-8 px-3 text-sm gap-3',\n};\n\n/**\n * Icon-only size presets (square buttons)\n * All buttons use w-8 h-8 (2rem) for consistency\n */\nconst iconOnlySizeStyles: Record<ButtonSize, string> = {\n sm: 'w-8 h-8 p-0',\n md: 'w-8 h-8 p-0',\n lg: 'w-8 h-8 p-0',\n};\n\n/**\n * Variant color schemes using semantic tokens\n * - primary: action background, primary text\n * - secondary: secondary surface, inverted text, inverts on hover\n * - outline: transparent background, primary border, fills on hover\n * - ghost: no border, subtle hover effect\n */\nconst variantStyles: Record<ButtonVariant, string> = {\n primary: `\n bg-action-primary text-content-primary\n hover:bg-action-primary\n active:bg-action-primary\n `,\n secondary: `\n bg-surface-secondary text-content-inverted\n hover:bg-surface-primary hover:text-content-primary\n active:bg-action-primary active:text-content-primary\n `,\n outline: `\n bg-transparent text-content-primary\n shadow-none\n hover:bg-content-primary/5 hover:!translate-y-0 hover:shadow-none\n active:bg-action-primary active:!translate-y-0 active:shadow-none\n `,\n ghost: `\n bg-transparent text-content-primary\n border-transparent\n shadow-none\n hover:bg-transparent hover:border-edge-primary hover:text-content-primary hover:shadow-none hover:translate-y-0\n active:bg-action-primary active:text-content-primary active:border-edge-primary active:translate-y-0\n `,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction getButtonClasses(\n variant: ButtonVariant,\n size: ButtonSize,\n iconOnly: boolean,\n fullWidth: boolean,\n className: string,\n hasIcon: boolean\n): string {\n // Determine justify class:\n // - iconOnly: always center\n // - fullWidth with icon: justify-between (spread text and icon)\n // - fullWidth without icon: justify-start\n // - regular button: justify-start\n let justifyClass = 'justify-start';\n if (iconOnly) {\n justifyClass = 'justify-center';\n } else if (fullWidth && hasIcon) {\n justifyClass = 'justify-between';\n }\n\n return [\n baseStyles,\n iconOnly ? iconOnlySizeStyles[size] : sizeStyles[size],\n justifyClass,\n variantStyles[variant],\n fullWidth ? 'w-full' : '',\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Button component with retro lift effect\n *\n * Supports both button and link behaviors:\n * - Without href: renders as <button>\n * - With href + asLink=true (default): renders as <a>\n * - With href + asLink=false: renders as <button> that opens URL via window.open\n *\n * Icon and loading indicator are provided via slots:\n * - icon: Pass your icon component (renders on the right)\n * - loadingIndicator: Pass your spinner component (replaces icon when loading)\n */\nexport function Button(props: ButtonProps) {\n const {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n iconOnly = false,\n icon,\n loadingIndicator,\n loading = false,\n children,\n className = '',\n ...rest\n } = props;\n\n // Only show loading indicator for buttons with icons\n const hasIcon = Boolean(icon || iconOnly);\n const showLoading: boolean = Boolean(loading && hasIcon && loadingIndicator);\n\n const classes = getButtonClasses(variant, size, iconOnly, fullWidth, className, hasIcon);\n\n // Render content with optional icon or loading indicator\n // Icons appear on the right side of the button text\n const content = showLoading ? (\n <>\n {!iconOnly && children}\n {loadingIndicator}\n </>\n ) : icon ? (\n <>\n {!iconOnly && children}\n {icon}\n </>\n ) : (\n children\n );\n\n // Check if this is a link variant\n if ('href' in props && props.href) {\n const { href, asLink = true, target, ...linkRest } = rest as ButtonAsLinkProps;\n\n // Use anchor element for navigation\n if (asLink) {\n return (\n <a\n href={href}\n target={target}\n className={classes}\n {...(linkRest as Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'target' | 'className'>)}\n >\n {content}\n </a>\n );\n }\n\n // Use window.open via button click\n const linkButtonDisabled: boolean = showLoading || Boolean((linkRest as React.ButtonHTMLAttributes<HTMLButtonElement>).disabled);\n const { disabled: _, ...linkButtonRest } = linkRest as React.ButtonHTMLAttributes<HTMLButtonElement>;\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => window.open(href, target || '_self')}\n disabled={linkButtonDisabled}\n {...linkButtonRest}\n >\n {content}\n </button>\n );\n }\n\n // Standard button\n const buttonProps = rest as ButtonAsButtonProps;\n\n // Disable button when loading\n const disabled: boolean = showLoading || Boolean(buttonProps.disabled);\n const { disabled: _, ...buttonPropsWithoutDisabled } = buttonProps;\n\n return (\n <button className={classes} {...buttonPropsWithoutDisabled} disabled={disabled}>\n {content}\n </button>\n );\n}\n\nexport default Button;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype CardVariant = 'default' | 'dark' | 'raised';\n\ninterface CardProps {\n /** Visual variant */\n variant?: CardVariant;\n /** Card content */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n /** Optional padding override */\n noPadding?: boolean;\n}\n\ninterface CardHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\ninterface CardBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\ninterface CardFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Base styles for all cards\n */\nconst baseStyles = `\n border border-edge-primary\n rounded-md\n overflow-hidden\n`;\n\n/**\n * Variant styles using semantic tokens\n * - default: primary surface, primary text\n * - dark: secondary surface, inverted text\n * - raised: primary surface with retro shadow effect\n */\nconst variantStyles: Record<CardVariant, string> = {\n default: `\n bg-surface-primary text-content-primary\n `,\n dark: `\n bg-surface-secondary text-content-inverted\n `,\n raised: `\n bg-surface-primary text-content-primary\n shadow-card\n `,\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Card container component with consistent styling\n */\nexport function Card({\n variant = 'default',\n children,\n className = '',\n noPadding = false,\n}: CardProps) {\n const classes = [\n baseStyles,\n variantStyles[variant],\n noPadding ? '' : 'p-4',\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return (\n <div className={classes}>\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// Card Sub-components\n// ============================================================================\n\n/**\n * Card header with bottom border\n */\nexport function CardHeader({ children, className = '' }: CardHeaderProps) {\n return (\n <div className={`px-4 py-3 border-b border-edge-primary ${className}`}>\n {children}\n </div>\n );\n}\n\n/**\n * Card body with standard padding\n */\nexport function CardBody({ children, className = '' }: CardBodyProps) {\n return (\n <div className={`p-4 ${className}`}>\n {children}\n </div>\n );\n}\n\n/**\n * Card footer with top border\n */\nexport function CardFooter({ children, className = '' }: CardFooterProps) {\n return (\n <div className={`px-4 py-3 border-t border-edge-primary ${className}`}>\n {children}\n </div>\n );\n}\n\nexport default Card;\n","'use client';\n\nimport React, { forwardRef } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Label text */\n label?: string;\n /** Additional classes for container */\n className?: string;\n}\n\ninterface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Label text */\n label?: string;\n /** Additional classes for container */\n className?: string;\n}\n\n// ============================================================================\n// Checkmark Icon (inline SVG)\n// ============================================================================\n\nfunction CheckmarkIcon({ className = '' }: { className?: string }) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M13.5 4.5L6 12L2.5 8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Checkbox Component\n// ============================================================================\n\n/**\n * Retro-styled checkbox\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { label, className = '', disabled, ...props },\n ref\n) {\n return (\n <label\n className={`\n inline-flex items-center gap-2 cursor-pointer\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n >\n <div className=\"relative\">\n <input\n ref={ref}\n type=\"checkbox\"\n disabled={disabled}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom checkbox visual */}\n <div\n className={`\n w-5 h-5\n bg-surface-primary\n border border-edge-primary\n rounded-xs\n peer-checked:bg-action-primary\n peer-focus:ring-2 peer-focus:ring-edge-focus peer-focus:ring-offset-1\n flex items-center justify-center\n `}\n />\n {/* Checkmark - visible when checkbox is checked */}\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 opacity-0 peer-checked:opacity-100 transition-opacity pointer-events-none\">\n <CheckmarkIcon className=\"text-content-primary\" />\n </div>\n </div>\n {label && (\n <span className=\"font-mondwest text-base text-content-primary select-none\">\n {label}\n </span>\n )}\n </label>\n );\n});\n\n// ============================================================================\n// Radio Component\n// ============================================================================\n\n/**\n * Retro-styled radio button\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { label, className = '', disabled, ...props },\n ref\n) {\n return (\n <label\n className={`\n inline-flex items-center gap-2 cursor-pointer\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n >\n <div className=\"relative\">\n <input\n ref={ref}\n type=\"radio\"\n disabled={disabled}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom radio visual */}\n <div\n className={`\n w-5 h-5\n bg-surface-primary\n border border-edge-primary\n rounded-full\n peer-checked:bg-action-primary\n peer-focus:ring-2 peer-focus:ring-edge-focus peer-focus:ring-offset-1\n flex items-center justify-center\n `}\n >\n {/* Inner dot placeholder */}\n </div>\n {/* Inner dot when checked */}\n <div\n className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-2 h-2 bg-content-primary rounded-full opacity-0 peer-checked:opacity-100 pointer-events-none\"\n />\n </div>\n {label && (\n <span className=\"font-mondwest text-base text-content-primary select-none\">\n {label}\n </span>\n )}\n </label>\n );\n});\n\nexport default Checkbox;\n","'use client';\n\nimport React, { useState, useRef, useEffect, createContext, useContext } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface ContextMenuContextValue {\n isOpen: boolean;\n position: Position;\n open: (position: Position) => void;\n close: () => void;\n}\n\ninterface ContextMenuProps {\n /** Content that triggers context menu on right-click */\n children: React.ReactNode;\n /** Additional classes for trigger container */\n className?: string;\n}\n\ninterface ContextMenuContentProps {\n /** Menu items */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\ninterface ContextMenuItemProps {\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Destructive action (red text) */\n destructive?: boolean;\n /** Icon element to display before the label */\n icon?: React.ReactNode;\n /** Menu item content */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\ninterface ContextMenuSeparatorProps {\n className?: string;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ContextMenuContext = createContext<ContextMenuContextValue | null>(null);\n\nfunction useContextMenu() {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error('ContextMenu components must be used within a ContextMenu provider');\n }\n return context;\n}\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Context menu container - wraps content that should have right-click menu\n */\nexport function ContextMenu({ children, className = '' }: ContextMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState<Position>({ x: 0, y: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n\n const open = (pos: Position) => {\n setPosition(pos);\n setIsOpen(true);\n };\n\n const close = () => {\n setIsOpen(false);\n };\n\n // Handle right-click\n const handleContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n open({ x: e.clientX, y: e.clientY });\n };\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n close();\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen]);\n\n return (\n <ContextMenuContext.Provider value={{ isOpen, position, open, close }}>\n <div\n ref={containerRef}\n onContextMenu={handleContextMenu}\n className={className}\n >\n {children}\n </div>\n </ContextMenuContext.Provider>\n );\n}\n\n/**\n * Context menu dropdown content\n */\nexport function ContextMenuContent({ children, className = '' }: ContextMenuContentProps) {\n const { isOpen, position, close } = useContextMenu();\n\n if (!isOpen) return null;\n\n return (\n <div\n className={`\n fixed z-[1000]\n min-w-[160px]\n bg-surface-primary\n border border-edge-primary\n rounded-sm\n shadow-[2px_2px_0_0_var(--color-edge-primary)]\n py-1\n ${className}\n `}\n style={{\n left: position.x,\n top: position.y,\n }}\n onClick={close}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Context menu item\n */\nexport function ContextMenuItem({\n onClick,\n disabled = false,\n destructive = false,\n icon,\n children,\n className = '',\n}: ContextMenuItemProps) {\n const { close } = useContextMenu();\n\n const handleClick = () => {\n if (!disabled && onClick) {\n onClick();\n close();\n }\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={`\n w-full flex items-center gap-2\n px-3 py-1.5\n font-mondwest text-base text-left\n ${destructive ? 'text-status-error' : 'text-content-primary'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-action-primary cursor-pointer'}\n ${className}\n `}\n >\n {icon && (\n <span className=\"w-4 h-4 flex items-center justify-center\">\n {icon}\n </span>\n )}\n <span>{children}</span>\n </button>\n );\n}\n\n/**\n * Context menu separator line\n */\nexport function ContextMenuSeparator({ className = '' }: ContextMenuSeparatorProps) {\n return (\n <div\n className={`my-1 border-t border-edge-primary/20 ${className}`}\n />\n );\n}\n\nexport default ContextMenu;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype DividerOrientation = 'horizontal' | 'vertical';\ntype DividerVariant = 'solid' | 'dashed' | 'decorated';\n\ninterface DividerProps {\n /** Orientation */\n orientation?: DividerOrientation;\n /** Visual variant */\n variant?: DividerVariant;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Divider component for separating content\n */\nexport function Divider({\n orientation = 'horizontal',\n variant = 'solid',\n className = '',\n}: DividerProps) {\n // Decorated variant with diamond in center\n if (variant === 'decorated') {\n return (\n <div className={`flex items-center gap-4 ${className}`}>\n <div className=\"flex-1 h-[2px] bg-edge-primary/20\" />\n <div className=\"w-2 h-2 bg-action-primary border border-edge-primary rotate-45\" />\n <div className=\"flex-1 h-[2px] bg-edge-primary/20\" />\n </div>\n );\n }\n\n // Horizontal divider\n if (orientation === 'horizontal') {\n const borderStyle = variant === 'dashed' ? 'border-dashed' : 'border-solid';\n return (\n <div\n className={`w-full border-t border-edge-primary/20 ${borderStyle} ${className}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n );\n }\n\n // Vertical divider\n const borderStyle = variant === 'dashed' ? 'border-dashed' : 'border-solid';\n return (\n <div\n className={`h-full border-l border-edge-primary/20 ${borderStyle} ${className}`}\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n );\n}\n\nexport default Divider;\n","'use client';\n\nimport React, { createContext, useContext, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useEscapeKey, useClickOutside } from '../../../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype DropdownPosition = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\n\ninterface DropdownContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n position: DropdownPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext);\n if (!context) {\n throw new Error('DropdownMenu components must be used within a DropdownMenu');\n }\n return context;\n}\n\n// ============================================================================\n// Dropdown Menu Root\n// ============================================================================\n\ninterface DropdownMenuProps {\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Position relative to trigger */\n position?: DropdownPosition;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DropdownMenu({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n position = 'bottom-start',\n children,\n}: DropdownMenuProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const triggerRef = useRef<HTMLElement>(null);\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n }, [isControlled, onOpenChange]);\n\n return (\n <DropdownContext.Provider value={{ open, setOpen, triggerRef, position }}>\n <div className=\"relative inline-block\">\n {children}\n </div>\n </DropdownContext.Provider>\n );\n}\n\n// ============================================================================\n// Dropdown Menu Trigger\n// ============================================================================\n\ninterface DropdownMenuTriggerProps {\n /** Trigger element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function DropdownMenuTrigger({ children, asChild }: DropdownMenuTriggerProps) {\n const { open, setOpen, triggerRef } = useDropdownContext();\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void; ref?: React.Ref<HTMLElement | null> }>, {\n onClick: handleClick,\n ref: triggerRef as React.Ref<HTMLElement | null>,\n });\n }\n\n return (\n <button\n type=\"button\"\n ref={triggerRef as React.RefObject<HTMLButtonElement>}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n}\n\n// ============================================================================\n// Dropdown Menu Content\n// ============================================================================\n\ninterface DropdownMenuContentProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DropdownMenuContent({ className = '', children }: DropdownMenuContentProps) {\n const { open, setOpen, triggerRef, position } = useDropdownContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Calculate position\n useEffect(() => {\n if (!open || !triggerRef.current || !contentRef.current) return;\n\n const trigger = triggerRef.current.getBoundingClientRect();\n const content = contentRef.current.getBoundingClientRect();\n const gap = 4;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'bottom-start':\n top = trigger.bottom + gap;\n left = trigger.left;\n break;\n case 'bottom-end':\n top = trigger.bottom + gap;\n left = trigger.right - content.width;\n break;\n case 'top-start':\n top = trigger.top - content.height - gap;\n left = trigger.left;\n break;\n case 'top-end':\n top = trigger.top - content.height - gap;\n left = trigger.right - content.width;\n break;\n }\n\n // Keep within viewport\n top = Math.max(8, Math.min(top, window.innerHeight - content.height - 8));\n left = Math.max(8, Math.min(left, window.innerWidth - content.width - 8));\n\n setCoords({ top, left });\n }, [open, position, triggerRef]);\n\n // Handle click outside\n useClickOutside(open, [contentRef, triggerRef], () => setOpen(false));\n\n // Handle escape\n useEscapeKey(open, () => setOpen(false));\n\n if (!mounted || !open) return null;\n\n return createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={`\n fixed z-50\n min-w-[8rem]\n bg-surface-primary\n border-2 border-edge-primary\n rounded-sm\n shadow-[2px_2px_0_0_var(--color-edge-primary)]\n py-1\n animate-fadeIn\n ${className}\n `.trim()}\n style={{ top: coords.top, left: coords.left }}\n >\n {children}\n </div>,\n document.body\n );\n}\n\n// ============================================================================\n// Dropdown Menu Item\n// ============================================================================\n\ninterface DropdownMenuItemProps {\n /** Item content */\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Destructive styling */\n destructive?: boolean;\n /** Additional className */\n className?: string;\n}\n\nexport function DropdownMenuItem({\n children,\n onClick,\n disabled = false,\n destructive = false,\n className = '',\n}: DropdownMenuItemProps) {\n const { setOpen } = useDropdownContext();\n\n const handleClick = () => {\n if (disabled) return;\n onClick?.();\n setOpen(false);\n };\n\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={handleClick}\n disabled={disabled}\n className={`\n w-full px-4 py-2\n text-left\n font-mondwest text-base\n ${destructive ? 'text-status-error' : 'text-content-primary'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-content-primary/5 cursor-pointer'}\n transition-colors\n ${className}\n `.trim()}\n >\n {children}\n </button>\n );\n}\n\n// ============================================================================\n// Dropdown Menu Separator\n// ============================================================================\n\ninterface DropdownMenuSeparatorProps {\n /** Additional className */\n className?: string;\n}\n\nexport function DropdownMenuSeparator({ className = '' }: DropdownMenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`h-px bg-edge-primary/20 my-1 ${className}`.trim()}\n />\n );\n}\n\n// ============================================================================\n// Dropdown Menu Label\n// ============================================================================\n\ninterface DropdownMenuLabelProps {\n /** Label content */\n children: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\nexport function DropdownMenuLabel({ children, className = '' }: DropdownMenuLabelProps) {\n return (\n <div\n className={`\n px-4 py-1\n font-joystix text-2xs uppercase\n text-content-primary/50\n ${className}\n `.trim()}\n >\n {children}\n </div>\n );\n}\n\nexport default DropdownMenu;\n","'use client';\n\nimport React, { forwardRef } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype InputSize = 'sm' | 'md' | 'lg';\n\ninterface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Size preset */\n size?: InputSize;\n /** Error state */\n error?: boolean;\n /** Full width */\n fullWidth?: boolean;\n /** Icon name (filename without .svg extension) - displays on the left */\n iconName?: string;\n /** Additional classes */\n className?: string;\n}\n\ninterface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Error state */\n error?: boolean;\n /** Full width */\n fullWidth?: boolean;\n /** Additional classes */\n className?: string;\n}\n\ninterface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode;\n required?: boolean;\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Base input styles using semantic tokens\n */\nconst baseStyles = `\n font-sans\n bg-surface-primary text-content-primary\n border border-edge-primary\n rounded-sm\n placeholder:text-content-muted\n focus:outline-none\n focus:ring-2 focus:ring-edge-focus focus:ring-offset-0\n disabled:opacity-50 disabled:cursor-not-allowed\n`;\n\n/**\n * Size presets\n */\nconst sizeStyles: Record<InputSize, string> = {\n sm: 'h-8 px-2 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-base',\n};\n\n/**\n * Error state styles using semantic tokens\n */\nconst errorStyles = `\n border-status-error\n focus:ring-status-error\n`;\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Text input with semantic token styling\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n size = 'md',\n error = false,\n fullWidth = false,\n iconName,\n className = '',\n ...props\n },\n ref\n) {\n const paddingLeft = iconName ? (size === 'sm' ? 'pl-8' : size === 'lg' ? 'pl-12' : 'pl-10') : '';\n\n const classes = [\n baseStyles,\n sizeStyles[size],\n error ? errorStyles : '',\n fullWidth ? 'w-full' : '',\n paddingLeft,\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n const input = (\n <input ref={ref} className={classes} {...props} />\n );\n\n if (iconName) {\n return (\n <div className=\"relative\">\n {/* Icon slot placeholder - integrate with Icon component as needed */}\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <div\n className=\"text-content-muted\"\n data-icon-slot={iconName}\n style={{\n width: size === 'sm' ? 14 : size === 'lg' ? 18 : 20,\n height: size === 'sm' ? 14 : size === 'lg' ? 18 : 20,\n }}\n />\n </div>\n {input}\n </div>\n );\n }\n\n return input;\n});\n\n/**\n * Textarea with semantic token styling\n */\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextArea(\n {\n error = false,\n fullWidth = false,\n className = '',\n ...props\n },\n ref\n) {\n const classes = [\n baseStyles,\n 'px-3 py-2 text-base',\n 'resize-y min-h-24',\n error ? errorStyles : '',\n fullWidth ? 'w-full' : '',\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return (\n <textarea ref={ref} className={classes} {...props} />\n );\n});\n\n/**\n * Form label with optional required indicator\n */\nexport function Label({ children, required, className = '', ...props }: LabelProps) {\n return (\n <label\n className={className}\n {...props}\n >\n {children}\n {required && <span className=\"text-status-error ml-1\">*</span>}\n </label>\n );\n}\n\nexport default Input;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ProgressVariant = 'default' | 'success' | 'warning' | 'error';\ntype ProgressSize = 'sm' | 'md' | 'lg';\n\ninterface ProgressProps {\n /** Progress value (0-100) */\n value: number;\n /** Maximum value */\n max?: number;\n /** Visual variant */\n variant?: ProgressVariant;\n /** Size preset */\n size?: ProgressSize;\n /** Show percentage label */\n showLabel?: boolean;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst sizeStyles: Record<ProgressSize, string> = {\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n};\n\nconst variantStyles: Record<ProgressVariant, string> = {\n default: 'bg-action-primary',\n success: 'bg-status-success',\n warning: 'bg-surface-tertiary',\n error: 'bg-status-error',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Progress bar with retro styling\n */\nexport function Progress({\n value,\n max = 100,\n variant = 'default',\n size = 'md',\n showLabel = false,\n className = '',\n}: ProgressProps) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <div className={`w-full ${className}`}>\n {/* Track */}\n <div\n className={`\n w-full\n bg-surface-primary\n border border-edge-primary\n rounded-sm\n overflow-hidden\n ${sizeStyles[size]}\n `}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n {/* Fill */}\n <div\n className={`\n h-full\n ${variantStyles[variant]}\n `}\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n {/* Label */}\n {showLabel && (\n <div className=\"mt-1 font-joystix text-2xs text-content-primary text-right\">\n {Math.round(percentage)}%\n </div>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Loading Spinner\n// ============================================================================\n\ninterface SpinnerProps {\n /** Size in pixels */\n size?: number;\n /** Additional classes */\n className?: string;\n /** Whether loading is completed - shows checkmark */\n completed?: boolean;\n}\n\n// PixelCode loader frames - Private Use Area characters from PixelCode font\n// These are the 6-frame loader animation characters (U+EE06-U+EE0B)\n// Frame1: Frame2: Frame3: Frame4: Frame5: Frame6:\nconst LOADER_FRAMES = ['\\uEE06', '\\uEE07', '\\uEE08', '\\uEE09', '\\uEE0A', '\\uEE0B'];\n\n/**\n * PixelCode loader with animated frames that loop through 6 frames\n * When completed, displays a checkmark (checkmark)\n */\nexport function Spinner({ size = 24, className = '', completed = false }: SpinnerProps) {\n const [frameIndex, setFrameIndex] = React.useState(0);\n\n React.useEffect(() => {\n if (completed) {\n setFrameIndex(0); // Reset to first frame when completed\n return;\n }\n\n const interval = setInterval(() => {\n setFrameIndex((prev) => (prev + 1) % LOADER_FRAMES.length);\n }, 150); // Change frame every 150ms for smooth animation\n\n return () => clearInterval(interval);\n }, [completed]);\n\n const fontSize = size;\n const displayChar = completed ? '\\u2713' : LOADER_FRAMES[frameIndex];\n\n return (\n <div\n className={`inline-block flex items-center justify-center ${className}`}\n style={{\n width: size,\n height: size,\n fontSize: fontSize,\n fontFamily: 'PixelCode, monospace',\n lineHeight: 1,\n }}\n aria-label={completed ? 'Completed' : 'Loading'}\n role=\"status\"\n >\n {displayChar}\n </div>\n );\n}\n\nexport default Progress;\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface SelectProps {\n /** Available options */\n options: SelectOption[];\n /** Currently selected value */\n value?: string;\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Change handler */\n onChange?: (value: string) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Error state */\n error?: boolean;\n /** Full width */\n fullWidth?: boolean;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Custom select/dropdown with retro styling\n */\nexport function Select({\n options,\n value,\n placeholder = 'Select...',\n onChange,\n disabled = false,\n error = false,\n fullWidth = false,\n className = '',\n}: SelectProps) {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = (optionValue: string) => {\n onChange?.(optionValue);\n setIsOpen(false);\n };\n\n return (\n <div\n ref={containerRef}\n className={`relative ${fullWidth ? 'w-full' : 'w-fit'} ${className}`}\n >\n {/* Trigger Button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={`\n flex items-center justify-between gap-2\n w-full h-10 px-3\n font-mondwest text-base\n bg-surface-primary text-content-primary\n border rounded-sm\n ${error ? 'border-status-error' : 'border-edge-primary'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${isOpen ? 'shadow-[0_3px_0_0_var(--color-edge-primary)] -translate-y-0.5' : 'shadow-[0_1px_0_0_var(--color-edge-primary)]'}\n `}\n >\n <span className={selectedOption ? 'text-content-primary' : 'text-content-primary/40'}>\n {selectedOption?.label || placeholder}\n </span>\n <span className={`text-content-primary ${isOpen ? 'rotate-180' : ''}`}>▼</span>\n </button>\n\n {/* Dropdown Menu */}\n {isOpen && (\n <div\n className={`\n absolute z-50 top-full left-0 right-0 mt-1\n bg-surface-primary\n border border-edge-primary\n rounded-sm\n shadow-[2px_2px_0_0_var(--color-edge-primary)]\n overflow-hidden\n `}\n >\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => !option.disabled && handleSelect(option.value)}\n disabled={option.disabled}\n className={`\n w-full px-3 py-2\n font-mondwest text-base text-left\n ${option.value === value ? 'bg-action-primary text-content-primary' : 'text-content-primary'}\n ${option.disabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-action-primary cursor-pointer'}\n `}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport default Select;\n","'use client';\n\nimport React, { useRef, useState, useCallback, useEffect } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype SliderSize = 'sm' | 'md' | 'lg';\n\ninterface SliderProps {\n /** Current value */\n value: number;\n /** Change handler */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Size preset */\n size?: SliderSize;\n /** Disabled state */\n disabled?: boolean;\n /** Show value label */\n showValue?: boolean;\n /** Label text */\n label?: string;\n /** Additional className */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst sizeStyles: Record<SliderSize, { track: string; thumb: string }> = {\n sm: {\n track: 'h-1',\n thumb: 'w-3 h-3',\n },\n md: {\n track: 'h-2',\n thumb: 'w-4 h-4',\n },\n lg: {\n track: 'h-3',\n thumb: 'w-5 h-5',\n },\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Slider component - Numeric range input\n */\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size = 'md',\n disabled = false,\n showValue = false,\n label,\n className = '',\n}: SliderProps) {\n const trackRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const styles = sizeStyles[size];\n\n // Calculate percentage\n const percentage = ((value - min) / (max - min)) * 100;\n\n // Snap value to step\n const snapToStep = useCallback((val: number) => {\n const stepped = Math.round((val - min) / step) * step + min;\n return Math.max(min, Math.min(max, stepped));\n }, [min, max, step]);\n\n // Calculate value from position\n const getValueFromPosition = useCallback((clientX: number) => {\n if (!trackRef.current) return value;\n\n const rect = trackRef.current.getBoundingClientRect();\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const newValue = min + percent * (max - min);\n return snapToStep(newValue);\n }, [min, max, value, snapToStep]);\n\n // Handle mouse/touch events\n const handlePointerDown = useCallback((e: React.PointerEvent) => {\n if (disabled) return;\n\n e.preventDefault();\n setIsDragging(true);\n\n const newValue = getValueFromPosition(e.clientX);\n onChange(newValue);\n }, [disabled, getValueFromPosition, onChange]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handlePointerMove = (e: PointerEvent) => {\n const newValue = getValueFromPosition(e.clientX);\n onChange(newValue);\n };\n\n const handlePointerUp = () => {\n setIsDragging(false);\n };\n\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging, getValueFromPosition, onChange]);\n\n // Handle keyboard\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n let newValue = value;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(max, value + step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(min, value - step);\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n onChange(newValue);\n };\n\n return (\n <div className={`space-y-2 ${className}`.trim()}>\n {/* Label & Value */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <span className=\"font-mondwest text-base text-content-primary\">\n {label}\n </span>\n )}\n {showValue && (\n <span className=\"font-mondwest text-sm text-content-primary/60\">\n {value}\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n ref={trackRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled}\n onPointerDown={handlePointerDown}\n onKeyDown={handleKeyDown}\n className={`\n relative w-full\n flex items-center\n ${styles.track}\n bg-edge-primary/10\n border border-edge-primary\n rounded-sm\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n focus:outline-none focus:ring-2 focus:ring-edge-focus focus:ring-offset-2\n `.trim()}\n >\n {/* Filled Track */}\n <div\n className={`\n absolute top-0 left-0 h-full\n bg-action-primary\n rounded-sm\n pointer-events-none\n `.trim()}\n style={{ width: `${percentage}%` }}\n />\n\n {/* Thumb wrapper for horizontal positioning */}\n <div\n className=\"absolute top-0 bottom-0 flex items-center pointer-events-none\"\n style={{ left: `calc(${percentage}% - ${parseInt(styles.thumb.split(' ')[0].replace('w-', '')) * 2}px)` }}\n >\n {/* Thumb */}\n <div\n className={`\n ${styles.thumb}\n bg-surface-muted\n border border-edge-primary\n rounded\n ${isDragging ? 'scale-110' : ''}\n transition-transform\n pointer-events-auto\n `.trim()}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport default Slider;\n","'use client';\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype SwitchSize = 'sm' | 'md' | 'lg';\n\ninterface SwitchProps {\n /** Checked state */\n checked: boolean;\n /** Change handler */\n onChange: (checked: boolean) => void;\n /** Size preset */\n size?: SwitchSize;\n /** Disabled state */\n disabled?: boolean;\n /** Label text */\n label?: string;\n /** Label position */\n labelPosition?: 'left' | 'right';\n /** Additional className */\n className?: string;\n /** ID for accessibility */\n id?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst sizeStyles: Record<SwitchSize, { track: string; thumb: string; translate: string }> = {\n sm: {\n track: 'w-8 h-4',\n thumb: 'w-3 h-3',\n translate: 'translate-x-4',\n },\n md: {\n track: 'w-10 h-5',\n thumb: 'w-4 h-4',\n translate: 'translate-x-5',\n },\n lg: {\n track: 'w-12 h-6',\n thumb: 'w-5 h-5',\n translate: 'translate-x-6',\n },\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Switch component - On/off toggle\n */\nexport function Switch({\n checked,\n onChange,\n size = 'md',\n disabled = false,\n label,\n labelPosition = 'right',\n className = '',\n id,\n}: SwitchProps) {\n const styles = sizeStyles[size];\n const switchId = id || `switch-${Math.random().toString(36).slice(2)}`;\n\n const handleClick = () => {\n if (!disabled) {\n onChange(!checked);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handleClick();\n }\n };\n\n const switchElement = (\n <button\n type=\"button\"\n role=\"switch\"\n id={switchId}\n aria-checked={checked}\n disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`\n relative inline-flex items-center\n ${styles.track}\n rounded-full\n border border-edge-primary\n transition-colors\n ${checked ? 'bg-action-primary' : 'bg-edge-primary/10'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n focus:outline-none focus:ring-2 focus:ring-edge-focus focus:ring-offset-2\n `.trim()}\n >\n {/* Thumb */}\n <span\n className={`\n ${styles.thumb}\n rounded-full\n bg-surface-secondary\n border border-edge-primary\n transform transition-transform\n ${checked ? styles.translate : 'translate-x-0.5'}\n `.trim()}\n aria-hidden=\"true\"\n />\n </button>\n );\n\n if (!label) {\n return <div className={className}>{switchElement}</div>;\n }\n\n return (\n <div className={`inline-flex items-center gap-2 ${className}`.trim()}>\n {labelPosition === 'left' && (\n <label\n htmlFor={switchId}\n className={`\n font-mondwest text-base text-content-primary\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n `.trim()}\n >\n {label}\n </label>\n )}\n\n {switchElement}\n\n {labelPosition === 'right' && (\n <label\n htmlFor={switchId}\n className={`\n font-mondwest text-base text-content-primary\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n `.trim()}\n >\n {label}\n </label>\n )}\n </div>\n );\n}\n\nexport default Switch;\n","'use client';\n\nimport React, { createContext, useContext, useState } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype TabsVariant = 'pill' | 'line';\ntype TabsLayout = 'default' | 'bottom-tabs';\n\ninterface TabsContextValue {\n activeTab: string;\n setActiveTab: (id: string) => void;\n variant: TabsVariant;\n layout: TabsLayout;\n}\n\ninterface TabsProps {\n /** Default active tab ID (uncontrolled mode) */\n defaultValue?: string;\n /** Active tab ID (controlled mode) */\n value?: string;\n /** Callback when tab changes (controlled mode) */\n onValueChange?: (value: string) => void;\n /** Visual variant */\n variant?: TabsVariant;\n /** Layout pattern - 'bottom-tabs' (default) for fixed bottom tabs, 'default' for top tabs */\n layout?: TabsLayout;\n /** Tab components */\n children: React.ReactNode;\n /** Additional classes for container */\n className?: string;\n}\n\ninterface TabListProps {\n /** TabTrigger components */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\ninterface TabTriggerProps {\n /** Unique tab ID */\n value: string;\n /** Tab label */\n children: React.ReactNode;\n /** Icon as React element (slot pattern for theme components) */\n icon?: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\ninterface TabContentProps {\n /** Tab ID this content belongs to */\n value: string;\n /** Content to render when active */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error('Tab components must be used within a Tabs provider');\n }\n return context;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Tab trigger base styles - matching ComponentsSecondaryNav button styles exactly\n */\nconst triggerBaseStyles = `\n flex items-center justify-center gap-2\n px-4 py-2\n font-joystix text-xs uppercase\n cursor-pointer select-none\n text-content-primary\n transition-all duration-200 ease-out\n relative\n border border-edge-primary\n rounded-sm\n flex-1\n shadow-none\n`;\n\n/**\n * Pill variant styles (matching ComponentsSecondaryNav button styles exactly)\n */\nconst pillStyles = {\n inactive: `\n bg-transparent text-content-primary\n hover:bg-surface-secondary/5\n hover:translate-y-0\n hover:shadow-none\n `,\n active: `\n bg-action-primary text-content-primary\n hover:bg-action-primary\n hover:translate-y-0\n hover:shadow-none\n `,\n};\n\n/**\n * Line variant styles (Webflow-style tabs with connected active state)\n * Only adds background/border colors - movement/shadow states come from baseStyles\n */\nconst lineStyles = {\n inactive: `\n bg-transparent\n hover:bg-surface-primary/50\n `,\n active: `\n border-b-0\n bg-surface-primary\n border-t border-l border-r border-edge-primary\n rounded-t-md\n mb-0\n relative\n z-10\n `,\n};\n\n// ============================================================================\n// Components\n// ============================================================================\n\n/**\n * Tabs container - provides context for tab state\n * Supports both controlled and uncontrolled modes\n */\nexport function Tabs({\n defaultValue,\n value,\n onValueChange,\n variant = 'pill',\n layout = 'bottom-tabs',\n children,\n className = '',\n}: TabsProps) {\n // Uncontrolled mode uses internal state\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n\n // Determine if controlled or uncontrolled\n const isControlled = value !== undefined;\n const activeTab = isControlled ? value : internalValue;\n\n const setActiveTab = (newValue: string) => {\n if (isControlled) {\n onValueChange?.(newValue);\n } else {\n setInternalValue(newValue);\n }\n };\n\n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab, variant, layout }}>\n <div className={className}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\n/**\n * Container for tab triggers - matching PrimaryNavigationFooter styles\n */\nexport function TabList({ children, className = '' }: TabListProps) {\n const { layout } = useTabsContext();\n\n // For bottom-tabs layout, ensure shrink-0 so tabs never compress\n const shrinkClass = layout === 'bottom-tabs' ? 'shrink-0' : '';\n\n return (\n <div className={`flex items-center justify-between gap-4 px-2 py-2 bg-surface-primary border-t border-edge-primary ${shrinkClass} ${className}`}>\n {/* Wrap tabs in flex container to match PrimaryNavigationFooter structure */}\n <div className=\"flex gap-2 items-center overflow-x-auto w-full\">\n {children}\n </div>\n </div>\n );\n}\n\n/**\n * Individual tab trigger button - Webflow-style\n */\nexport function TabTrigger({\n value,\n children,\n icon,\n className = '',\n}: TabTriggerProps) {\n const { activeTab, setActiveTab, variant } = useTabsContext();\n const isActive = activeTab === value;\n\n const variantStyle = variant === 'pill'\n ? (isActive ? pillStyles.active : pillStyles.inactive)\n : (isActive ? lineStyles.active : lineStyles.inactive);\n\n const classes = [\n triggerBaseStyles,\n variantStyle,\n className,\n ]\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => setActiveTab(value)}\n className={classes}\n >\n {/* Render icon from React component slot - icon comes first to match PrimaryNavigationFooter */}\n {icon}\n {children}\n </button>\n );\n}\n\n/**\n * Tab content panel - Webflow-style tab pane\n */\nexport function TabContent({\n value,\n children,\n className = '',\n}: TabContentProps) {\n const { activeTab, variant } = useTabsContext();\n\n if (activeTab !== value) {\n return null;\n }\n\n // For line variant, content connects seamlessly with active tab\n const contentClasses = variant === 'line'\n ? `bg-surface-primary border-r border-edge-primary ${className}`\n : className;\n\n return (\n <div\n role=\"tabpanel\"\n className={contentClasses}\n style={{ height: 'auto' }}\n >\n {children}\n </div>\n );\n}\n\nexport default Tabs;\n","'use client';\n\nimport React, { useState, useRef } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\ntype TooltipSize = 'sm' | 'md' | 'lg';\n\ninterface TooltipProps {\n /** Tooltip content */\n content: React.ReactNode;\n /** Position relative to trigger */\n position?: TooltipPosition;\n /** Delay before showing (ms) - set to 0 for instant */\n delay?: number;\n /** Size preset - matches Button sizes (sm=12px, md=12px, lg=14px) */\n size?: TooltipSize;\n /** Trigger element */\n children: React.ReactNode;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst positionStyles: Record<TooltipPosition, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n};\n\nconst arrowStyles: Record<TooltipPosition, string> = {\n top: 'top-full left-1/2 -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent border-t-surface-secondary',\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent border-b-surface-secondary',\n left: 'left-full top-1/2 -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-surface-secondary',\n right: 'right-full top-1/2 -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-surface-secondary',\n};\n\n/**\n * Font size presets matching Button component sizes\n * sm=12px, md=12px, lg=14px\n */\nconst sizeStyles: Record<TooltipSize, string> = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Tooltip component for hover information\n */\nexport function Tooltip({\n content,\n position = 'top',\n delay = 0,\n size = 'md',\n children,\n className = '',\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const showTooltip = () => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setIsVisible(true), delay);\n } else {\n setIsVisible(true);\n }\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n return (\n <div\n className={`relative inline-flex ${className}`}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n >\n {children}\n\n {isVisible && (\n <div\n className={`\n absolute z-[1000]\n px-2 py-1\n bg-surface-secondary text-content-inverted\n font-joystix uppercase\n rounded-sm\n whitespace-nowrap\n pointer-events-none\n ${sizeStyles[size]}\n ${positionStyles[position]}\n `}\n role=\"tooltip\"\n >\n {content}\n {/* Arrow */}\n <div\n className={`\n absolute\n border-4 border-solid\n ${arrowStyles[position]}\n `}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport default Tooltip;\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ToastVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\n\ninterface ToastData {\n id: string;\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number;\n /** Custom icon element - overrides variant default */\n icon?: React.ReactNode;\n}\n\ninterface ToastContextValue {\n toasts: ToastData[];\n addToast: (toast: Omit<ToastData, 'id'>) => string;\n removeToast: (id: string) => void;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Toast Provider\n// ============================================================================\n\ninterface ToastProviderProps {\n /** Children */\n children: React.ReactNode;\n /** Default duration in ms */\n defaultDuration?: number;\n /** Optional render function for variant icons */\n renderIcon?: (variant: ToastVariant) => React.ReactNode;\n /** Optional render function for close icon */\n renderCloseIcon?: () => React.ReactNode;\n}\n\nexport function ToastProvider({\n children,\n defaultDuration = 5000,\n renderIcon,\n renderCloseIcon,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n const addToast = useCallback((toast: Omit<ToastData, 'id'>) => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const duration = toast.duration ?? defaultDuration;\n\n setToasts((prev) => [...prev, { ...toast, id }]);\n\n // Auto-remove after duration\n if (duration > 0) {\n setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, duration);\n }\n\n return id;\n }, [defaultDuration]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n {mounted && createPortal(\n <ToastViewport\n toasts={toasts}\n removeToast={removeToast}\n renderIcon={renderIcon}\n renderCloseIcon={renderCloseIcon}\n />,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\n// ============================================================================\n// Toast Viewport\n// ============================================================================\n\ninterface ToastViewportProps {\n toasts: ToastData[];\n removeToast: (id: string) => void;\n renderIcon?: (variant: ToastVariant) => React.ReactNode;\n renderCloseIcon?: () => React.ReactNode;\n}\n\nfunction ToastViewport({ toasts, removeToast, renderIcon, renderCloseIcon }: ToastViewportProps) {\n if (toasts.length === 0) return null;\n\n return (\n <div\n className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 max-w-sm w-full pointer-events-none\"\n aria-live=\"polite\"\n >\n {toasts.map((toast) => (\n <Toast\n key={toast.id}\n toast={toast}\n onClose={() => removeToast(toast.id)}\n renderIcon={renderIcon}\n renderCloseIcon={renderCloseIcon}\n />\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// Toast Component\n// ============================================================================\n\nconst variantStyles: Record<ToastVariant, string> = {\n default: 'bg-surface-primary border-edge-primary',\n success: 'bg-status-success border-status-success',\n warning: 'bg-status-warning border-surface-tertiary',\n error: 'bg-status-error border-status-error',\n info: 'bg-status-info border-status-info',\n};\n\ninterface ToastProps {\n toast: ToastData;\n onClose: () => void;\n renderIcon?: (variant: ToastVariant) => React.ReactNode;\n renderCloseIcon?: () => React.ReactNode;\n}\n\nfunction Toast({ toast, onClose, renderIcon, renderCloseIcon }: ToastProps) {\n const variant = toast.variant || 'default';\n\n // Use custom icon if provided, otherwise use renderIcon function if available\n const displayIcon = toast.icon ?? (renderIcon ? renderIcon(variant) : null);\n\n return (\n <div\n className={`\n pointer-events-auto\n p-4\n border-2\n rounded-sm\n shadow-[2px_2px_0_0_var(--color-edge-primary)]\n animate-slideIn\n ${variantStyles[variant]}\n `.trim()}\n role=\"alert\"\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n {displayIcon && (\n <span className=\"flex-shrink-0\">\n {displayIcon}\n </span>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-joystix text-xs uppercase text-content-primary\">\n {toast.title}\n </p>\n {toast.description && (\n <p className=\"font-mondwest text-base text-content-primary/70 mt-1\">\n {toast.description}\n </p>\n )}\n </div>\n\n {/* Close Button */}\n <button\n onClick={onClose}\n className=\"text-content-primary/50 hover:text-content-primary flex-shrink-0 -mt-1\"\n aria-label=\"Close\"\n >\n {renderCloseIcon ? renderCloseIcon() : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n </div>\n </div>\n );\n}\n\nexport default ToastProvider;\n","'use client';\n\nimport React, { useEffect, useRef } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface HelpPanelProps {\n /** Whether the panel is open */\n isOpen: boolean;\n /** Callback when panel should close */\n onClose: () => void;\n /** Help content to display */\n children: React.ReactNode;\n /** Optional title for the help panel */\n title?: string;\n /** Close button slot - renders your own close button/icon */\n closeButton?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Slide-in help panel that appears from the right side of the window.\n * Used to display contextual help content within app windows.\n *\n * Uses slot-based API for the close button to avoid coupling to specific\n * icon systems. Pass your own button component via the `closeButton` prop.\n */\nexport function HelpPanel({\n isOpen,\n onClose,\n children,\n title = 'Help',\n closeButton,\n className = '',\n}: HelpPanelProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n // Handle escape key to close\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, onClose]);\n\n // Handle click outside to close\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node) && isOpen) {\n onClose();\n }\n };\n\n // Add slight delay to prevent immediate close on open click\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n className={`\n absolute inset-0 z-50\n bg-surface-secondary/20\n flex justify-center items-center\n `}\n >\n <div\n ref={panelRef}\n className={`\n h-full w-full max-w-4xl\n bg-surface-primary\n border border-edge-primary\n shadow-card-lg\n flex flex-col\n animate-slide-in-right\n ${className}\n `}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-edge-primary\">\n <span className=\"font-joystix text-xs text-content-primary uppercase\">\n {title}\n </span>\n {closeButton ? (\n <span onClick={onClose} className=\"cursor-pointer\">\n {closeButton}\n </span>\n ) : (\n <button\n onClick={onClose}\n className=\"text-content-primary/50 hover:text-content-primary p-1\"\n aria-label=\"Close help panel\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">\n <div className=\"font-mondwest text-base text-content-primary space-y-4\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default HelpPanel;\n","'use client';\n\nimport React, { createContext, useContext, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useEscapeKey, useClickOutside } from '../../../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype PopoverPosition = 'top' | 'bottom' | 'left' | 'right';\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n position: PopoverPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const context = useContext(PopoverContext);\n if (!context) {\n throw new Error('Popover components must be used within a Popover');\n }\n return context;\n}\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\ninterface PopoverProps {\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Position relative to trigger */\n position?: PopoverPosition;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function Popover({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n position = 'bottom',\n children,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const triggerRef = useRef<HTMLElement>(null);\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n }, [isControlled, onOpenChange]);\n\n return (\n <PopoverContext.Provider value={{ open, setOpen, triggerRef, position }}>\n {children}\n </PopoverContext.Provider>\n );\n}\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\ninterface PopoverTriggerProps {\n /** Trigger element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function PopoverTrigger({ children, asChild }: PopoverTriggerProps) {\n const { open, setOpen, triggerRef } = usePopoverContext();\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void; ref?: React.Ref<HTMLElement | null> }>, {\n onClick: handleClick,\n ref: triggerRef as React.Ref<HTMLElement | null>,\n });\n }\n\n return (\n <button\n type=\"button\"\n ref={triggerRef as React.RefObject<HTMLButtonElement>}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n}\n\n// ============================================================================\n// Popover Content\n// ============================================================================\n\ninterface PopoverContentProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n /** Alignment relative to trigger */\n align?: 'start' | 'center' | 'end';\n}\n\nexport function PopoverContent({ className = '', children, align = 'center' }: PopoverContentProps) {\n const { open, setOpen, triggerRef, position } = usePopoverContext();\n const contentRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Calculate position\n useEffect(() => {\n if (!open || !triggerRef.current || !contentRef.current) return;\n\n const trigger = triggerRef.current.getBoundingClientRect();\n const content = contentRef.current.getBoundingClientRect();\n const gap = 8;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = trigger.top - content.height - gap;\n left = trigger.left + (trigger.width - content.width) / 2;\n break;\n case 'bottom':\n top = trigger.bottom + gap;\n left = trigger.left + (trigger.width - content.width) / 2;\n break;\n case 'left':\n top = trigger.top + (trigger.height - content.height) / 2;\n left = trigger.left - content.width - gap;\n break;\n case 'right':\n top = trigger.top + (trigger.height - content.height) / 2;\n left = trigger.right + gap;\n break;\n }\n\n // Adjust for alignment\n if (position === 'top' || position === 'bottom') {\n if (align === 'start') {\n left = trigger.left;\n } else if (align === 'end') {\n left = trigger.right - content.width;\n }\n }\n\n // Keep within viewport\n top = Math.max(8, Math.min(top, window.innerHeight - content.height - 8));\n left = Math.max(8, Math.min(left, window.innerWidth - content.width - 8));\n\n setCoords({ top, left });\n }, [open, position, align, triggerRef]);\n\n // Handle click outside\n useClickOutside(open, [contentRef, triggerRef], () => setOpen(false));\n\n // Handle escape\n useEscapeKey(open, () => setOpen(false));\n\n if (!mounted || !open) return null;\n\n return createPortal(\n <div\n ref={contentRef}\n className={`\n fixed z-50\n bg-surface-primary\n border-2 border-edge-primary\n rounded-sm\n shadow-[2px_2px_0_0_var(--color-edge-primary)]\n p-4\n animate-fadeIn\n ${className}\n `.trim()}\n style={{ top: coords.top, left: coords.left }}\n >\n {children}\n </div>,\n document.body\n );\n}\n\nexport default Popover;\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useEscapeKey, useLockBodyScroll } from '../../../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype SheetSide = 'left' | 'right' | 'top' | 'bottom';\n\ninterface SheetContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n side: SheetSide;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst SheetContext = createContext<SheetContextValue | null>(null);\n\nfunction useSheetContext() {\n const context = useContext(SheetContext);\n if (!context) {\n throw new Error('Sheet components must be used within a Sheet');\n }\n return context;\n}\n\n// ============================================================================\n// Sheet Root\n// ============================================================================\n\ninterface SheetProps {\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Side to slide in from */\n side?: SheetSide;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function Sheet({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n children,\n}: SheetProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n }, [isControlled, onOpenChange]);\n\n return (\n <SheetContext.Provider value={{ open, setOpen, side }}>\n {children}\n </SheetContext.Provider>\n );\n}\n\n// ============================================================================\n// Sheet Trigger\n// ============================================================================\n\ninterface SheetTriggerProps {\n /** Trigger element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function SheetTrigger({ children, asChild }: SheetTriggerProps) {\n const { setOpen } = useSheetContext();\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void }>, {\n onClick: () => setOpen(true),\n });\n }\n\n return (\n <button type=\"button\" onClick={() => setOpen(true)}>\n {children}\n </button>\n );\n}\n\n// ============================================================================\n// Sheet Content\n// ============================================================================\n\nconst sideStyles: Record<SheetSide, { container: string; open: string; closed: string }> = {\n left: {\n container: 'inset-y-0 left-0 h-full w-80 max-w-[90vw]',\n open: 'translate-x-0',\n closed: '-translate-x-full',\n },\n right: {\n container: 'inset-y-0 right-0 h-full w-80 max-w-[90vw]',\n open: 'translate-x-0',\n closed: 'translate-x-full',\n },\n top: {\n container: 'inset-x-0 top-0 w-full h-80 max-h-[90vh]',\n open: 'translate-y-0',\n closed: '-translate-y-full',\n },\n bottom: {\n container: 'inset-x-0 bottom-0 w-full h-80 max-h-[90vh]',\n open: 'translate-y-0',\n closed: 'translate-y-full',\n },\n};\n\ninterface SheetContentProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetContent({ className = '', children }: SheetContentProps) {\n const { open, setOpen, side } = useSheetContext();\n const [mounted, setMounted] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const styles = sideStyles[side];\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Handle animation states\n useEffect(() => {\n if (open) {\n setIsVisible(true);\n } else {\n // Delay hiding until animation completes\n const timer = setTimeout(() => {\n setIsVisible(false);\n }, 200);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // Handle escape key\n useEscapeKey(open, () => setOpen(false));\n\n // Prevent body scroll when open\n useLockBodyScroll(open);\n\n if (!mounted || !isVisible) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-50\">\n {/* Overlay */}\n <div\n className={`\n absolute inset-0 bg-surface-secondary/50\n transition-opacity duration-200\n ${open ? 'opacity-100' : 'opacity-0'}\n `.trim()}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n\n {/* Content */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={`\n fixed\n ${styles.container}\n bg-surface-primary\n border-edge-primary\n ${side === 'left' ? 'border-r-2' : ''}\n ${side === 'right' ? 'border-l-2' : ''}\n ${side === 'top' ? 'border-b-2' : ''}\n ${side === 'bottom' ? 'border-t-2' : ''}\n shadow-[4px_4px_0_0_var(--color-edge-primary)]\n transform transition-transform duration-200 ease-out\n ${open ? styles.open : styles.closed}\n ${className}\n `.trim()}\n >\n {children}\n </div>\n </div>,\n document.body\n );\n}\n\n// ============================================================================\n// Sheet Header, Title, Description\n// ============================================================================\n\ninterface SheetHeaderProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetHeader({ className = '', children }: SheetHeaderProps) {\n return (\n <div className={`px-6 pt-6 pb-4 border-b border-edge-primary/20 ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\ninterface SheetTitleProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetTitle({ className = '', children }: SheetTitleProps) {\n return (\n <h2 className={`font-joystix text-base uppercase text-content-primary ${className}`.trim()}>\n {children}\n </h2>\n );\n}\n\ninterface SheetDescriptionProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetDescription({ className = '', children }: SheetDescriptionProps) {\n return (\n <p className={`font-mondwest text-base text-content-primary/70 mt-2 ${className}`.trim()}>\n {children}\n </p>\n );\n}\n\n// ============================================================================\n// Sheet Body & Footer\n// ============================================================================\n\ninterface SheetBodyProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetBody({ className = '', children }: SheetBodyProps) {\n return (\n <div className={`px-6 py-4 flex-1 overflow-auto ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\ninterface SheetFooterProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function SheetFooter({ className = '', children }: SheetFooterProps) {\n return (\n <div className={`px-6 pb-6 pt-4 border-t border-edge-primary/20 flex justify-end gap-2 ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// Sheet Close\n// ============================================================================\n\ninterface SheetCloseProps {\n /** Close button element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function SheetClose({ children, asChild }: SheetCloseProps) {\n const { setOpen } = useSheetContext();\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void }>, {\n onClick: () => setOpen(false),\n });\n }\n\n return (\n <button type=\"button\" onClick={() => setOpen(false)}>\n {children}\n </button>\n );\n}\n\nexport default Sheet;\n","'use client';\n\nimport React from 'react';\nimport { Button } from '../Button/Button';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface MockStateDefinition {\n /** Unique identifier for this mock state */\n id: string;\n /** Display name */\n name: string;\n /** Short description */\n description: string;\n /** Category for grouping (e.g., 'wallet', 'auction', 'user') */\n category: string;\n /** Optional icon (emoji or component) */\n icon?: React.ReactNode;\n}\n\nexport interface MockStateCategory {\n /** Category identifier */\n id: string;\n /** Display label */\n label: string;\n}\n\nexport interface MockStatesPopoverProps {\n /** Whether the popover is open */\n isOpen: boolean;\n /** Callback when the popover should close */\n onClose: () => void;\n /** Array of mock state definitions */\n mockStates: MockStateDefinition[];\n /** Currently active mock state ID */\n activeMockState?: string;\n /** Callback when a mock state is selected */\n onSelectState: (stateId: string) => void;\n /** Categories to display (in order). States are grouped by category. */\n categories?: MockStateCategory[];\n /** Title shown in the header */\n title?: string;\n /** Footer text */\n footerText?: string;\n /** Additional className for the popover container */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst popoverStyles = `\n absolute top-12 right-2 z-50 w-72\n bg-surface-primary border-2 border-edge-primary rounded-sm shadow-lg\n`;\n\nconst headerStyles = `\n flex items-center justify-between px-3 py-2 border-b border-edge-primary/20\n`;\n\nconst contentStyles = `\n p-2 space-y-3 max-h-80 overflow-y-auto\n`;\n\nconst categoryLabelStyles = `\n font-heading text-xs uppercase text-content-secondary px-2 mb-1\n`;\n\nconst footerStyles = `\n px-3 py-2 border-t border-edge-primary/20 bg-content-primary/5\n`;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * MockStatesPopover\n *\n * A development-only popover for toggling between mock states.\n * Displays categorized mock state presets that can be applied\n * to test different UI scenarios.\n *\n * This is a generic component - pass your mock state definitions\n * and handlers as props.\n */\nexport function MockStatesPopover({\n isOpen,\n onClose,\n mockStates,\n activeMockState,\n onSelectState,\n categories,\n title = 'Mock States',\n footerText = 'Dev mode only',\n className = '',\n}: MockStatesPopoverProps) {\n if (!isOpen) return null;\n\n // Get unique categories from states if not provided\n const derivedCategories = categories ??\n [...new Set(mockStates.map(s => s.category))].map(cat => ({\n id: cat,\n label: cat.charAt(0).toUpperCase() + cat.slice(1),\n }));\n\n // Group states by category\n const statesByCategory = derivedCategories.map(cat => ({\n category: cat,\n states: mockStates.filter(s => s.category === cat.id),\n })).filter(group => group.states.length > 0);\n\n const renderStateButton = (def: MockStateDefinition) => {\n const isActive = activeMockState === def.id;\n return (\n <button\n key={def.id}\n onClick={() => onSelectState(def.id)}\n className={`\n w-full text-left px-3 py-2 rounded-sm\n flex items-center gap-2\n transition-colors duration-150\n ${\n isActive\n ? 'bg-action-primary text-content-primary'\n : 'hover:bg-content-primary/5 text-content-primary'\n }\n `}\n >\n {def.icon && <span className=\"text-sm\">{def.icon}</span>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-heading text-xs uppercase truncate\">\n {def.name}\n </div>\n <div className=\"font-body text-xs text-content-secondary truncate\">\n {def.description}\n </div>\n </div>\n {isActive && <span className=\"text-xs\">&#x2713;</span>}\n </button>\n );\n };\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-40\"\n onClick={onClose}\n />\n\n {/* Popover */}\n <div className={`${popoverStyles} ${className}`.trim()}>\n {/* Header */}\n <div className={headerStyles}>\n <span className=\"font-heading text-xs uppercase\">{title}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n onClick={onClose}\n aria-label=\"Close\"\n >\n &#x2715;\n </Button>\n </div>\n\n {/* Content */}\n <div className={contentStyles}>\n {statesByCategory.map(({ category, states }) => (\n <div key={category.id}>\n <div className={categoryLabelStyles}>\n {category.label}\n </div>\n <div className=\"space-y-1\">\n {states.map(renderStateButton)}\n </div>\n </div>\n ))}\n </div>\n\n {/* Footer */}\n {footerText && (\n <div className={footerStyles}>\n <div className=\"font-body text-xs text-content-secondary text-center\">\n {footerText}\n </div>\n </div>\n )}\n </div>\n </>\n );\n}\n\nexport default MockStatesPopover;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype CountdownVariant = 'default' | 'compact' | 'large';\ntype CountdownStatus = 'active' | 'ended' | 'upcoming';\n\ninterface TimeRemaining {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n total: number;\n}\n\ninterface CountdownTimerProps {\n /** Target timestamp (Unix ms or Date) */\n endTime: number | Date;\n /** Optional start time for \"upcoming\" status */\n startTime?: number | Date;\n /** Visual variant */\n variant?: CountdownVariant;\n /** Label text shown above timer */\n label?: string;\n /** Callback when countdown reaches zero */\n onComplete?: () => void;\n /** Custom ended message */\n endedMessage?: string;\n /** Custom upcoming message */\n upcomingMessage?: string;\n /** Show days segment */\n showDays?: boolean;\n /** Additional classes */\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles = `\n text-center\n`;\n\nconst variantStyles: Record<CountdownVariant, {\n container: string;\n label: string;\n timer: string;\n segment: string;\n value: string;\n unit: string;\n separator: string;\n}> = {\n default: {\n container: 'p-4 bg-surface-primary border border-edge-primary rounded-md',\n label: 'font-mono text-xs text-content-primary/60 mb-2',\n timer: 'flex items-center justify-center gap-1',\n segment: 'flex flex-col items-center min-w-[3rem]',\n value: 'font-joystix text-2xl text-content-primary tabular-nums',\n unit: 'font-mono text-2xs text-content-primary/50 uppercase mt-0.5',\n separator: 'font-joystix text-xl text-content-primary/40 self-start mt-1',\n },\n compact: {\n container: 'px-3 py-2 bg-surface-primary border border-edge-primary rounded-sm',\n label: 'font-mono text-2xs text-content-primary/60 mb-1',\n timer: 'flex items-center justify-center gap-0.5',\n segment: 'flex flex-col items-center min-w-[2rem]',\n value: 'font-joystix text-sm text-content-primary tabular-nums',\n unit: 'font-mono text-2xs text-content-primary/50 uppercase',\n separator: 'font-joystix text-sm text-content-primary/40 self-start',\n },\n large: {\n container: 'p-6 bg-surface-primary border border-edge-primary rounded-md shadow-card',\n label: 'font-mono text-sm text-content-primary/60 mb-3',\n timer: 'flex items-center justify-center gap-2',\n segment: 'flex flex-col items-center min-w-[4rem] bg-surface-muted border border-edge-primary rounded-sm px-3 py-2',\n value: 'font-joystix text-3xl text-content-primary tabular-nums',\n unit: 'font-mono text-xs text-content-primary/50 uppercase mt-1',\n separator: 'font-joystix text-2xl text-content-primary/40 self-center',\n },\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction getTimeRemaining(endTime: number | Date): TimeRemaining {\n const end = typeof endTime === 'number' ? endTime : endTime.getTime();\n const total = Math.max(0, end - Date.now());\n\n const seconds = Math.floor((total / 1000) % 60);\n const minutes = Math.floor((total / 1000 / 60) % 60);\n const hours = Math.floor((total / (1000 * 60 * 60)) % 24);\n const days = Math.floor(total / (1000 * 60 * 60 * 24));\n\n return { days, hours, minutes, seconds, total };\n}\n\nfunction getStatus(\n endTime: number | Date,\n startTime?: number | Date\n): CountdownStatus {\n const now = Date.now();\n const end = typeof endTime === 'number' ? endTime : endTime.getTime();\n const start = startTime\n ? typeof startTime === 'number'\n ? startTime\n : startTime.getTime()\n : now;\n\n if (now < start) return 'upcoming';\n if (now >= end) return 'ended';\n return 'active';\n}\n\nfunction padZero(num: number): string {\n return num.toString().padStart(2, '0');\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * CountdownTimer component for auction countdowns\n *\n * Features:\n * - Live countdown with days/hours/mins/secs\n * - Three size variants (compact, default, large)\n * - Automatic status detection (active, ended, upcoming)\n * - Callback on completion\n */\nexport function CountdownTimer({\n endTime,\n startTime,\n variant = 'default',\n label,\n onComplete,\n endedMessage = 'Ended',\n upcomingMessage = 'Starting soon',\n showDays = true,\n className = '',\n}: CountdownTimerProps) {\n const [timeRemaining, setTimeRemaining] = useState<TimeRemaining>(() =>\n getTimeRemaining(endTime)\n );\n const [status, setStatus] = useState<CountdownStatus>(() =>\n getStatus(endTime, startTime)\n );\n\n const updateTime = useCallback(() => {\n const newTime = getTimeRemaining(endTime);\n const newStatus = getStatus(endTime, startTime);\n\n setTimeRemaining(newTime);\n setStatus(newStatus);\n\n if (newStatus === 'ended' && onComplete) {\n onComplete();\n }\n }, [endTime, startTime, onComplete]);\n\n useEffect(() => {\n updateTime();\n\n if (status === 'ended') return;\n\n const interval = setInterval(updateTime, 1000);\n return () => clearInterval(interval);\n }, [updateTime, status]);\n\n const styles = variantStyles[variant];\n\n // Render ended state\n if (status === 'ended') {\n return (\n <div className={`${baseStyles} ${styles.container} ${className}`}>\n {label && <p className={styles.label}>{label}</p>}\n <p className={`font-joystix ${variant === 'large' ? 'text-xl' : variant === 'compact' ? 'text-sm' : 'text-lg'} text-content-primary/60`}>\n {endedMessage}\n </p>\n </div>\n );\n }\n\n // Render upcoming state\n if (status === 'upcoming' && startTime) {\n const startRemaining = getTimeRemaining(startTime);\n return (\n <div className={`${baseStyles} ${styles.container} ${className}`}>\n <p className={styles.label}>Starts in</p>\n <div className={styles.timer}>\n {showDays && startRemaining.days > 0 && (\n <>\n <div className={styles.segment}>\n <span className={styles.value}>{startRemaining.days}</span>\n <span className={styles.unit}>days</span>\n </div>\n <span className={styles.separator}>:</span>\n </>\n )}\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(startRemaining.hours)}</span>\n <span className={styles.unit}>hrs</span>\n </div>\n <span className={styles.separator}>:</span>\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(startRemaining.minutes)}</span>\n <span className={styles.unit}>min</span>\n </div>\n <span className={styles.separator}>:</span>\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(startRemaining.seconds)}</span>\n <span className={styles.unit}>sec</span>\n </div>\n </div>\n </div>\n );\n }\n\n // Render active countdown\n return (\n <div className={`${baseStyles} ${styles.container} ${className}`}>\n {label && <p className={styles.label}>{label}</p>}\n <div className={styles.timer}>\n {showDays && timeRemaining.days > 0 && (\n <>\n <div className={styles.segment}>\n <span className={styles.value}>{timeRemaining.days}</span>\n <span className={styles.unit}>days</span>\n </div>\n <span className={styles.separator}>:</span>\n </>\n )}\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(timeRemaining.hours)}</span>\n <span className={styles.unit}>hrs</span>\n </div>\n <span className={styles.separator}>:</span>\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(timeRemaining.minutes)}</span>\n <span className={styles.unit}>min</span>\n </div>\n <span className={styles.separator}>:</span>\n <div className={styles.segment}>\n <span className={styles.value}>{padZero(timeRemaining.seconds)}</span>\n <span className={styles.unit}>sec</span>\n </div>\n </div>\n </div>\n );\n}\n\nexport default CountdownTimer;\n","'use client';\n\nimport React from 'react';\nimport { Button } from '../Button/Button';\n\n// Helper function to format wallet address\nfunction formatAddress(address: string | null | undefined): string {\n if (!address) return '';\n if (address.length <= 10) return address;\n return `${address.slice(0, 4)}...${address.slice(-4)}`;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface Web3ActionBarProps {\n /** Whether wallet is connected */\n isConnected: boolean;\n /** Wallet address to display when connected */\n walletAddress?: string | null;\n /** Callback when connect button is clicked */\n onConnect: () => void;\n /** Optional callback when disconnect button is clicked */\n onDisconnect?: () => void;\n /** Icon slot for disconnect button (pass your close icon component) */\n disconnectIcon?: React.ReactNode;\n /** App-specific action buttons (My Vault, Place Offering, Stake, etc.) */\n children?: React.ReactNode;\n /** Additional className */\n className?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Universal Web3 Action Bar for all web3 apps in RadOS\n *\n * Provides a consistent bottom bar for wallet connection and app-specific\n * blockchain actions. Used across Auctions, MurderTree, Vault, and future web3 apps.\n *\n * Architecture:\n * - TabList = Navigation tabs (web2 apps)\n * - Web3ActionBar = Wallet + blockchain actions (web3 apps)\n *\n * @example\n * ```tsx\n * <Web3ActionBar\n * isConnected={isConnected}\n * walletAddress={walletAddress}\n * onConnect={handleConnect}\n * onDisconnect={handleDisconnect}\n * disconnectIcon={<CloseIcon />}\n * >\n * <Button variant=\"outline\" onClick={handleShowVault}>My Vault</Button>\n * {status === 'live' && <Button>Place Offering</Button>}\n * </Web3ActionBar>\n * ```\n */\nexport function Web3ActionBar({\n isConnected,\n walletAddress,\n onConnect,\n onDisconnect,\n disconnectIcon,\n children,\n className = '',\n}: Web3ActionBarProps) {\n return (\n <div className={`flex items-center justify-between gap-4 px-2 py-2 bg-surface-primary border-t border-edge-primary shrink-0 ${className}`.trim()}>\n {/* Left: Wallet Connection */}\n <div className=\"flex gap-2 items-center\">\n {!isConnected ? (\n <Button onClick={onConnect}>Connect</Button>\n ) : (\n <>\n {/* Wallet address display */}\n {walletAddress && (\n <span className=\"font-mono text-xs text-content-primary\">{formatAddress(walletAddress)}</span>\n )}\n {/* Disconnect button */}\n {onDisconnect && (\n <Button\n variant=\"ghost\"\n iconOnly={true}\n icon={disconnectIcon}\n onClick={onDisconnect}\n title=\"Disconnect wallet\"\n />\n )}\n </>\n )}\n </div>\n\n {/* Right: App-specific actions (My Vault, Place Offering, Stake, etc.) */}\n {isConnected && children && (\n <div className=\"flex gap-2 items-center\">\n {children}\n </div>\n )}\n </div>\n );\n}\n\nexport default Web3ActionBar;\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useEscapeKey, useLockBodyScroll } from '../../../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext() {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error('Dialog components must be used within a Dialog');\n }\n return context;\n}\n\n// ============================================================================\n// Dialog Root\n// ============================================================================\n\ninterface DialogProps {\n /** Controlled open state */\n open?: boolean;\n /** Default open state for uncontrolled usage */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function Dialog({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n}: DialogProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n }, [isControlled, onOpenChange]);\n\n return (\n <DialogContext.Provider value={{ open, setOpen }}>\n {children}\n </DialogContext.Provider>\n );\n}\n\n// ============================================================================\n// Dialog Trigger\n// ============================================================================\n\ninterface DialogTriggerProps {\n /** Trigger element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function DialogTrigger({ children, asChild }: DialogTriggerProps) {\n const { setOpen } = useDialogContext();\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void }>, {\n onClick: () => setOpen(true),\n });\n }\n\n return (\n <button type=\"button\" onClick={() => setOpen(true)}>\n {children}\n </button>\n );\n}\n\n// ============================================================================\n// Dialog Portal & Overlay\n// ============================================================================\n\ninterface DialogContentProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogContent({ className = '', children }: DialogContentProps) {\n const { open, setOpen } = useDialogContext();\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Handle escape key\n useEscapeKey(open, () => setOpen(false));\n\n // Prevent body scroll when open\n useLockBodyScroll(open);\n\n if (!mounted || !open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Overlay */}\n <div\n className=\"absolute inset-0 bg-surface-secondary/50 animate-fadeIn\"\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n\n {/* Content */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={`\n relative z-10\n w-full max-w-lg mx-4\n bg-surface-primary\n border-2 border-edge-primary\n rounded-sm\n shadow-[4px_4px_0_0_var(--color-edge-primary)]\n animate-scaleIn\n ${className}\n `.trim()}\n >\n {children}\n </div>\n </div>,\n document.body\n );\n}\n\n// ============================================================================\n// Dialog Header, Title, Description\n// ============================================================================\n\ninterface DialogHeaderProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogHeader({ className = '', children }: DialogHeaderProps) {\n return (\n <div className={`px-6 pt-6 pb-4 border-b border-edge-primary/20 ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\ninterface DialogTitleProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogTitle({ className = '', children }: DialogTitleProps) {\n return (\n <h2 className={`font-joystix text-base uppercase text-content-primary ${className}`.trim()}>\n {children}\n </h2>\n );\n}\n\ninterface DialogDescriptionProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogDescription({ className = '', children }: DialogDescriptionProps) {\n return (\n <p className={`font-mondwest text-base text-content-primary/70 mt-2 ${className}`.trim()}>\n {children}\n </p>\n );\n}\n\n// ============================================================================\n// Dialog Body & Footer\n// ============================================================================\n\ninterface DialogBodyProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogBody({ className = '', children }: DialogBodyProps) {\n return (\n <div className={`px-6 py-4 ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\ninterface DialogFooterProps {\n /** Additional className */\n className?: string;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function DialogFooter({ className = '', children }: DialogFooterProps) {\n return (\n <div className={`px-6 pb-6 pt-4 border-t border-edge-primary/20 flex justify-end gap-2 ${className}`.trim()}>\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// Dialog Close\n// ============================================================================\n\ninterface DialogCloseProps {\n /** Close button element */\n children: React.ReactElement;\n /** Pass through as child instead of wrapping */\n asChild?: boolean;\n}\n\nexport function DialogClose({ children, asChild }: DialogCloseProps) {\n const { setOpen } = useDialogContext();\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<{ onClick?: () => void }>, {\n onClick: () => setOpen(false),\n });\n }\n\n return (\n <button type=\"button\" onClick={() => setOpen(false)}>\n {children}\n </button>\n );\n}\n\nexport default Dialog;\n"]}
@@ -0,0 +1,22 @@
1
+ import { RefObject } from 'react';
2
+
3
+ /**
4
+ * Hook to handle escape key press to close modals/overlays
5
+ * @param isActive - Whether the modal is currently open
6
+ * @param onEscape - Callback to close the modal
7
+ */
8
+ declare function useEscapeKey(isActive: boolean, onEscape: () => void): void;
9
+ /**
10
+ * Hook to detect clicks outside of specified element(s)
11
+ * @param isActive - Whether to listen for clicks
12
+ * @param refs - Array of refs to elements that should NOT trigger the callback
13
+ * @param onClickOutside - Callback when clicking outside all refs
14
+ */
15
+ declare function useClickOutside(isActive: boolean, refs: RefObject<HTMLElement | null>[], onClickOutside: () => void): void;
16
+ /**
17
+ * Hook to prevent body scroll when modal is open
18
+ * @param isActive - Whether to lock body scroll
19
+ */
20
+ declare function useLockBodyScroll(isActive: boolean): void;
21
+
22
+ export { useClickOutside, useEscapeKey, useLockBodyScroll };
@@ -0,0 +1,3 @@
1
+ export { useClickOutside, useEscapeKey, useLockBodyScroll } from '../chunk-SR2T7OEJ.mjs';
2
+ //# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}