@paymanai/payman-ask-sdk 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/index.d.mts +27 -9
- package/dist/index.d.ts +27 -9
- package/dist/index.js +210 -122
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +212 -124
- package/dist/index.mjs.map +1 -1
- package/dist/index.native.js +3159 -380
- package/dist/index.native.js.map +1 -1
- package/dist/styles.css +137 -126
- package/dist/styles.css.map +1 -1
- package/package.json +2 -2
package/dist/index.native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PaymanChat/index.native.tsx","../src/utils/cn.ts","../src/hooks/useSessionHistory.ts","../src/components/SessionHistorySidebar/index.tsx","../src/components/ChatHeader/index.native.tsx","../src/components/OtpInput/index.native.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.native.tsx","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/components/FloatingChat/index.tsx","../src/contexts/PaymanChatContext.tsx","../src/utils/relativeTime.ts"],"names":["forwardRef","PaymanChat","jsxs","View","jsx","Text","StyleSheet","twMerge","clsx","useMemo","useState","useEffect","useCallback","useRef","listSessions","PanelBottomOpen","s","PanelLeftOpen","createPortal","motion","X","PanelLeftClose","Check","MessageSquare","AlertCircle","RotateCcw","Fragment","Clipboard","styles","Pressable","Animated","newDigits","TextInput","Dimensions","Keyboard","Platform","Modal","KeyboardAvoidingView","ScrollView","ActivityIndicator","Image","Sentry","MessageCircle","ChevronDown","createContext","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,IAAM,UAAA,GAAaA,gBAAA,CAA2C,SAASC,WAAAA,CAC7E,QACA,IAAA,EACC;AACD,EAAA,uBACCC,eAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,EACnB,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,oBACxCD,cAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAM,QAAA,EAAA,wFAAA,EAE1B;AAAA,GAAA,EACD,CAAA;AAEF,CAAC;AAED,IAAM,MAAA,GAASC,uBAAW,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA;AAEb,CAAC,CAAA;ACtCM,SAAS,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;ACCA,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,iBAAA,GAAoB,EAAA;AA0B1B,SAAS,aAAA,CAAc,QAAwB,IAAA,EAAqC;AACnF,EAAA,IAAI,IAAA,CAAK,UAAA,EAAY,OAAO,IAAA,CAAK,UAAA;AACjC,EAAA,OAAO,CAAA,oBAAA,EAAuB,MAAA,CAAO,QAAA,CAAS,EAAA,IAAM,SAAS,CAAA,CAAA;AAC9D;AAEA,SAAS,mBAAmB,GAAA,EAAoC;AAC/D,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,IAAI;AACH,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,OAAO,MAAA,CAAO,KAAA,KAAU,YAAY,OAAO,MAAA,CAAO,cAAc,SAAA,EAAW;AAC9E,MAAA,OAAO,IAAA;AAAA,IACR;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3D,CAAA,CAAA,MAAQ;AACP,IAAA,OAAO,IAAA;AAAA,EACR;AACD;AAEA,SAAS,kBAAA,CAAmB,KAAa,KAAA,EAA6B;AACrE,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,IAAI;AACH,IAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAA,EAER;AACD;AAEO,SAAS,iBAAA,CACf,MAAA,EACA,OAAA,GAAiC,IACjC,kBAAA,EAC0B;AAC1B,EAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,aAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AAErC,EAAA,MAAM,UAAA,GAAaC,aAAA;AAAA,IAClB,MAAM,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAAA,IACnC,CAAC,MAAA,CAAO,QAAA,CAAS,EAAA,EAAI,QAAQ,UAAU;AAAA,GACxC;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAIC,eAAiB,MAAM;AACrD,IAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,IAAA,OAAO,WAAW,KAAA,IAAS,YAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,MAAM,CAAC,SAAA,EAAW,iBAAiB,CAAA,GAAIA,eAAkB,MAAM;AAC9D,IAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,IAAA,OAAO,SAAA,EAAW,SAAA,IAAa,OAAA,CAAQ,gBAAA,IAAoB,KAAA;AAAA,EAC5D,CAAC,CAAA;AAGD,EAAAC,eAAA,CAAU,MAAM;AACf,IAAA,MAAM,SAAA,GAAY,mBAAmB,UAAU,CAAA;AAC/C,IAAA,aAAA,CAAc,SAAA,EAAW,SAAS,YAAY,CAAA;AAC9C,IAAA,iBAAA,CAAkB,SAAA,EAAW,SAAA,IAAa,OAAA,CAAQ,gBAAA,IAAoB,KAAK,CAAA;AAAA,EAE5E,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,QAAA,GAAWC,iBAAA;AAAA,IAChB,CAAC,EAAA,KAAe;AACf,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAC,CAAA;AACrE,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,kBAAA,CAAmB,UAAA,EAAY,EAAE,KAAA,EAAO,OAAA,EAAS,WAAW,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,UAAU;AAAA,GAC3C;AAEA,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACpB,CAAC,KAAA,KAAkD;AAClD,MAAA,iBAAA,CAAkB,CAAC,IAAA,KAAS;AAC3B,QAAA,MAAM,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AACzD,QAAA,kBAAA,CAAmB,UAAA,EAAY,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,CAAA;AACzD,QAAA,OAAO,IAAA;AAAA,MACR,CAAC,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,KAAK;AAAA,GACnB;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,EAChB,MAAA,CAAO,OAAA,EAAS,KAAA,EAAO,EAAA,KACtB,MAAA,CAAO,QAAA,CAAS,EAAA,IAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CAAA,CAAA;AAGxC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,cAAA,CAA2B,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAcG,aAA+B,IAAI,CAAA;AACvD,EAAA,MAAM,SAAA,GAAYA,aAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,EAAA,MAAM,SAAA,GAAYD,iBAAA;AAAA,IACjB,OAAO,WAAmB,OAAA,KAAqB;AAC9C,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,WAAA,CAAY,SAAS,KAAA,EAAM;AAC3B,MAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,MAAA,WAAA,CAAY,OAAA,GAAU,EAAA;AACtB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACH,QAAA,MAAM,IAAA,GAAO,MAAME,mCAAA,CAAa,SAAA,CAAU,OAAA,EAAS;AAAA,UAClD,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,QAAQ,EAAA,CAAG;AAAA,SACX,CAAA;AACD,QAAA,WAAA,CAAY,CAAC,IAAA,KAAU,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,CAAC,GAAG,IAAA,EAAM,GAAG,IAAA,CAAK,IAAI,CAAE,CAAA;AACrE,QAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,QAAA,UAAA,CAAW,IAAA,CAAK,SAAS,OAAO,CAAA;AAAA,MACjC,SAAS,GAAA,EAAK;AACb,QAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACzC,UAAA,QAAA,CAAS,GAAY,CAAA;AAAA,QACtB;AAAA,MACD,CAAA,SAAE;AACD,QAAA,IAAI,WAAA,CAAY,YAAY,EAAA,EAAI;AAC/B,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACnB;AAAA,MACD;AAAA,IACD,CAAA;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,GACnB;AAEA,EAAA,MAAM,OAAA,GAAUF,kBAAY,MAAM,SAAA,CAAU,GAAG,IAAI,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AACjE,EAAA,MAAM,QAAA,GAAWA,kBAAY,YAAY;AACxC,IAAA,IAAI,CAAC,WAAW,SAAA,EAAW;AAC3B,IAAA,MAAM,SAAA,CAAU,IAAA,GAAO,CAAA,EAAG,KAAK,CAAA;AAAA,EAChC,GAAG,CAAC,SAAA,EAAW,OAAA,EAAS,SAAA,EAAW,IAAI,CAAC,CAAA;AAExC,EAAAD,eAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,kBAAA,EAAoB;AAEzB,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACrB,MAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACrB,MAAA,IAAI,gBAAgB,IAAA,CAAK,SAAA;AAAA,QACxB,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAA,KAAc,kBAAA,CAAmB;AAAA,OACvD;AAEA,MAAA,IAAI,aAAA,KAAkB,EAAA,IAAM,kBAAA,CAAmB,iBAAA,EAAmB;AACjE,QAAA,aAAA,GAAgB,IAAA,CAAK,SAAA;AAAA,UACpB,CAAC,OAAA,KACA,OAAA,CAAQ,SAAA,KAAc,kBAAA,CAAmB;AAAA,SAC3C;AAAA,MACD;AAEA,MAAA,MAAM,QAAA,GACL,iBAAiB,CAAA,GAAI,IAAA,CAAK,OAAO,aAAA,EAAe,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,MAAA;AACzD,MAAA,MAAM,iBACL,QAAA,EAAU,YAAA,IACV,QAAA,CAAS,YAAA,CAAa,MAAK,IAC3B,QAAA,CAAS,YAAA,KAAiB,kBAAA,GACvB,SAAS,YAAA,GACT,kBAAA,CAAmB,cAAc,IAAA,EAAK,IACvC,UAAU,YAAA,IACV,kBAAA;AAEH,MAAA,MAAM,eAA+B,QAAA,IAAY;AAAA,QAChD,MAAA,EAAQ,MAAA,CAAO,OAAA,EAAS,KAAA,EAAO,EAAA,IAAM,EAAA;AAAA,QACrC,SAAA,EACC,OAAO,OAAA,EAAS,KAAA,EAAO,QACvB,MAAA,CAAO,OAAA,EAAS,OAAO,EAAA,IACvB,EAAA;AAAA,QACD,WAAW,kBAAA,CAAmB,SAAA;AAAA,QAC9B,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,EAAA,IAAM,EAAA;AAAA,QAClC,YAAA,EAAc,OAAO,QAAA,CAAS,IAAA;AAAA,QAC9B,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,OAAA,IAAW,CAAA;AAAA,QAC5C,eAAe,kBAAA,CAAmB,aAAA;AAAA,QAClC,YAAA,EAAc,CAAA;AAAA,QACd,YAAA,EAAc;AAAA,OACf;AAEA,MAAA,IAAA,CAAK,OAAA,CAAQ;AAAA,QACZ,GAAG,YAAA;AAAA,QACH,WAAW,kBAAA,CAAmB,SAAA;AAAA,QAC9B,eAAe,kBAAA,CAAmB,aAAA;AAAA,QAClC,YAAA,EAAc;AAAA,OACd,CAAA;AAED,MAAA,OAAO,IAAA;AAAA,IACR,CAAC,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACF,MAAA,CAAO,SAAS,KAAA,EAAO,EAAA;AAAA,IACvB,MAAA,CAAO,SAAS,KAAA,EAAO,IAAA;AAAA,IACvB,OAAO,QAAA,CAAS,EAAA;AAAA,IAChB,OAAO,QAAA,CAAS,IAAA;AAAA,IAChB,OAAO,QAAA,CAAS,OAAA;AAAA,IAChB;AAAA,GACA,CAAA;AAGD,EAAAA,eAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,KAAK,SAAA,CAAU,GAAG,IAAI,CAAA;AACtB,IAAA,OAAO,MAAM;AACZ,MAAA,WAAA,CAAY,SAAS,KAAA,EAAM;AAAA,IAC5B,CAAA;AAAA,EAED,CAAA,EAAG;AAAA,IACF,OAAA;AAAA,IACA,OAAO,QAAA,CAAS,EAAA;AAAA,IAChB,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,MAAA,CAAO,SAAS,KAAA,EAAO;AAAA,GACvB,CAAA;AAED,EAAA,OAAO;AAAA,IACN,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD;AACD;ACxOA,IAAM,iBAAA,GAAoB,GAAA;AAW1B,SAAS,WAAA,GAAuB;AAC/B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAID,eAAkB,MAAM;AACvD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,OAAO,UAAA,GAAa,iBAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAAC,gBAAU,MAAM;AACf,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,iBAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,WAAA,CAAY,EAAE,OAAO,CAAA;AACjE,IAAA,WAAA,CAAY,IAAI,OAAO,CAAA;AACvB,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACvD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,QAAA;AACR;AAEA,SAAS,qBAAqB,MAAA,EAA8C;AAC3E,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,MAAA,SAAe,EAAC;AACtD,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA;AAC7C,EAAA,IAAI,EAAE,IAAA,YAAgB,WAAA,CAAA,EAAc,OAAO,EAAC;AAE5C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAA0B;AAAA,IAC/B,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,YAAY,QAAA,CAAS;AAAA,GACtB;AAEA,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,QAAA,CAAS,MAAA,EAAQ,SAAS,CAAA,EAAG;AACxD,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,cAAc,CAAA,EAAG;AACtC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,gBAAA,CAAiB,IAAI,EAAE,IAAA,EAAK;AACnD,IAAA,IAAI,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,KAAA;AACR;AA6BO,SAAS,qBAAA,CAAsB;AAAA,EACrC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA;AACD,CAAA,EAA+B;AAC9B,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,oBAAA,GAAuBE,aAAuB,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACvDH,cAAAA,CAA2B,EAAE,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,MAAA,EAAQ,OAAA,EAAS,kBAAkB,CAAA;AAErE,EAAAC,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,yBAAA,CAA0B,oBAAA,CAAqB,oBAAA,CAAqB,OAAO,CAAC,CAAA;AAAA,EAC7E,CAAA,EAAG,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAEzB,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,uBACCT,gBAAC,KAAA,EAAA,EAAI,GAAA,EAAK,sBAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,EAAW,EAC3D,QAAA,EAAA;AAAA,MAAA,CAAC,8BACDE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACd,QAAA,kBAAAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,sBAAA;AAAA,UACX,KAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAAA,UACtC,SAAA,EAAU,sEAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAACW,2BAAA,EAAA,EAAgB,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,OAC5B,EACD,CAAA;AAAA,sBAEDX,cAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAM,UAAA;AAAA,UACN,YAAA,EAAc,kBAAA;AAAA,UACd,UAAA,EAAY,sBAAA;AAAA,UACZ,OAAA;AAAA,UACA,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,mBAAA;AAAA,UACA,2BAAA;AAAA,UACA,eAAA,EAAiB,CAACY,EAAAA,KAAM;AACvB,YAAA,eAAA,CAAgBA,EAAC,CAAA;AACjB,YAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,UACzB;AAAA;AAAA;AACD,KAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,uBACCZ,cAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,2BAAA;AAAA,MACA;AAAA;AAAA,GACD;AAEF;AAeA,SAAS,cAAA,CAAe;AAAA,EACvB,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACD,CAAA,EAAiB;AAChB,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,YAAA,EAAc,QAAA,EAAU,UAAS,GAAI,OAAA;AAEzE,EAAA,MAAM,YAAA,GAAeS,aAAsD,IAAI,CAAA;AAC/E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIH,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,aAAA,GAAgBE,iBAAAA;AAAA,IACrB,CAAC,CAAA,KAA0C;AAC1C,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,UAAU,EAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAS,YAAY,KAAA,EAAM;AAC9D,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACP;AAEA,EAAAD,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAoB;AACnC,MAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,QAAA,CAAS,EAAA,CAAG,UAAA,IAAc,CAAA,CAAE,OAAA,GAAU,GAAG,MAAA,CAAO,CAAA;AAAA,IACjD,CAAA;AACA,IAAA,MAAM,QAAQ,MAAM;AACnB,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACpB,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,MAAM,CAAA;AAC7C,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,KAAK,CAAA;AAC1C,IAAA,MAAA,CAAO,gBAAA,CAAiB,iBAAiB,KAAK,CAAA;AAC9C,IAAA,OAAO,MAAM;AACZ,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,MAAM,CAAA;AAChD,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,KAAK,CAAA;AAC7C,MAAA,MAAA,CAAO,mBAAA,CAAoB,iBAAiB,KAAK,CAAA;AAAA,IAClD,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAA,IAAI,SAAA,EAAW;AACd,IAAA,uBACCP,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACA,QAAA,EAAU,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,QAClC,OAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,mBAAA;AAAA,QACA,2BAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,EAEF;AAEA,EAAA,MAAM,eAAe,WAAA,IAAe,UAAA;AAEpC,EAAA,uBACCF,eAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,uCAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,CAAA;AAAA,QACX,SAAA,EAAW,SAAA;AAAA,QACX,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,aAAa,MAAA,GAAS;AAAA,OACnC;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAE,eAAC,aAAA,EAAA,EAAc,UAAA,EAAY,MAAM,YAAA,CAAa,IAAI,CAAA,EAAG,CAAA;AAAA,wBACrDA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACA,OAAA;AAAA,YACA,eAAA;AAAA,YACA,gBAAA;AAAA,YACA,mBAAA;AAAA,YACA,2BAAA;AAAA,YACA;AAAA;AAAA,SACD;AAAA,wBACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,WAAA;AAAA,YACL,kBAAA,EAAiB,UAAA;AAAA,YACjB,aAAA,EAAe,aAAA;AAAA,YACf,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,YACvC,YAAA,EAAc,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,YACxC,SAAA,EAAU,uBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,EAAA;AAAA,cACP,KAAA,EAAO,CAAA;AAAA,cACP,MAAA,EAAQ,MAAA;AAAA,cACR,MAAA,EAAQ,YAAA;AAAA,cACR,UAAA,EAAY,MAAA;AAAA,cACZ,WAAA,EAAa,MAAA;AAAA,cACb,MAAA,EAAQ,CAAA;AAAA,cACR,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,cAAA,EAAgB;AAAA,aACjB;AAAA,YAEA,QAAA,kBAAAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACA,aAAA,EAAW,IAAA;AAAA,gBACX,KAAA,EAAO;AAAA,kBACN,KAAA,EAAO,CAAA;AAAA,kBACP,MAAA,EAAQ,EAAA;AAAA,kBACR,YAAA,EAAc,GAAA;AAAA,kBACd,UAAA,EAAY,eACT,yBAAA,GACA,aAAA;AAAA,kBACH,OAAA,EAAS,eAAe,CAAA,GAAI,CAAA;AAAA,kBAC5B,UAAA,EAAY;AAAA;AACb;AAAA;AACD;AAAA;AACD;AAAA;AAAA,GACD;AAEF;AAMA,IAAM,sBAAA,GAAyB,GAAA;AAE/B,SAAS,eAAA,CAAgB;AAAA,EACxB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACD,CAAA,EAQG;AACF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIM,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,aAAA,GAAgBG,aAA6C,IAAI,CAAA;AAEvE,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAC7D,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,MAAM,uBAAuB,MAAM;AAClC,IAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAC7D,IAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AAAA,MACvB,MAAM,aAAa,KAAK,CAAA;AAAA,MACxB;AAAA,KACD;AAAA,EACD,CAAA;AAEA,EAAAF,eAAAA;AAAA,IACC,MAAM,MAAM;AACX,MAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA;AAAC,GACF;AAEA,EAAA,uBACCT,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,0BAAA;AAAA,MACV,YAAA,EAAc,WAAA;AAAA,MACd,YAAA,EAAc,oBAAA;AAAA,MACd,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,WAAW,YAAA,EAAa;AAAA,MAEvD,QAAA,EAAA;AAAA,wBAAAE,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,gBAAA;AAAA,YACX,KAAA,EAAM,gBAAA;AAAA,YACN,OAAA,EAAS,QAAA;AAAA,YACT,SAAA,EAAU,iCAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA,CAACa,yBAAA,EAAA,EAAc,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SAC1B;AAAA,QAEC,6BACAf,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAU,wBAAA;AAAA,YACV,YAAA,EAAc,WAAA;AAAA,YACd,YAAA,EAAc,oBAAA;AAAA,YACd,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,IAAA,EAAM,kBAAA;AAAA,cACN,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,cAClC,SAAA,EAAW,GAAA;AAAA,cACX,MAAA,EAAQ,EAAA;AAAA,cACR,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,QAAA,EAAU;AAAA,aACX;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAE,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,8BACfA,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACA,OAAA;AAAA,kBACA,eAAA;AAAA,kBACA,gBAAA;AAAA,kBACA,mBAAA;AAAA,kBACA,2BAAA;AAAA,kBACA,eAAA,EAAiB,CAACY,EAAAA,KAAM;AACvB,oBAAA,eAAA,CAAgBA,EAAC,CAAA;AACjB,oBAAA,YAAA,CAAa,KAAK,CAAA;AAAA,kBACnB;AAAA;AAAA;AACD;AAAA;AAAA;AACD;AAAA;AAAA,GAEF;AAEF;AAkBA,SAAS,YAAA,CAAa;AAAA,EACrB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACD,CAAA,EAAgB;AACf,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,QAAA,KAAa,aAAa,OAAO,IAAA;AACrD,EAAA,OAAOE,qBAAA;AAAA,oBACNd,cAAAA;AAAA,MAACe,mBAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACA,SAAA,EAAU,yBAAA;AAAA,QACV,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,QACjC,KAAA,EAAO,UAAA;AAAA,QACP,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,QAE9C,QAAA,kBAAAjB,eAAAA;AAAA,UAACiB,mBAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACA,SAAA,EAAU,qCAAA;AAAA,YACV,WAAA,EAAU,MAAA;AAAA,YACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAClC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,YAAA,EAAW,iBAAA;AAAA,YACX,OAAA,EAAS,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,IAAA,EAAK;AAAA,YAChC,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YAC5B,UAAA,EAAY;AAAA,cACX,IAAA,EAAM,QAAA;AAAA,cACN,SAAA,EAAW,GAAA;AAAA,cACX,OAAA,EAAS,EAAA;AAAA,cACT,IAAA,EAAM;AAAA,aACP;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAf,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAA+B,eAAW,IAAA,EAAC,CAAA;AAAA,8BAC1DA,eAAC,aAAA,EAAA,EAAc,UAAA,EAAY,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,MAAA,EAAM,IAAA,EAAC,CAAA;AAAA,8BAC7DA,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACA,OAAA;AAAA,kBACA,eAAA;AAAA,kBACA,gBAAA;AAAA,kBACA,mBAAA;AAAA,kBACA,2BAAA;AAAA,kBACA;AAAA;AAAA;AACD;AAAA;AAAA;AACD;AAAA,KACD;AAAA,IACA,QAAA,CAAS;AAAA,GACV;AACD;AAYA,SAAS,aAAA,CAAc;AAAA,EACtB,UAAA;AAAA,EACA,MAAA,GAAS;AACV,CAAA,EAGG;AACF,EAAA,uBACCF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACd,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,UAAK,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,IACpB,8BACAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,SAAS,uBAAA,GAA0B,kBAAA;AAAA,QAC/C,KAAA,EAAO,SAAS,uBAAA,GAA0B,kBAAA;AAAA,QAC1C,OAAA,EAAS,UAAA;AAAA,QAER,QAAA,EAAA,MAAA,mBAASA,cAAAA,CAACgB,aAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA,mBAAKhB,cAAAA,CAACiB,0BAAA,EAAA,EAAe,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACvD,GAAA,EAEF,CAAA;AAEF;AAEA,SAAS,WAAA,CAAY;AAAA,EACpB,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACD,CAAA,EAOG;AACF,EAAA,MAAM,OAAA,GAAUR,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,EAAE,UAAU,OAAA,EAAS,SAAA,EAAW,OAAO,QAAA,EAAU,OAAA,EAAS,SAAQ,GACvE,OAAA;AAED,EAAA,MAAM,eAAeJ,aAAAA,CAAQ,0BAAU,IAAA,EAAK,EAAG,EAAE,CAAA;AACjD,EAAA,MAAM,aAAA,GAAgBA,aAAAA;AAAA,IACrB,MAAM,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,IAChD,CAAC,UAAU,YAAY;AAAA,GACxB;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACb,IAAA,uBACCL,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,8BAAA,EAEvC,CAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,uBACCF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAU,qBAAA;AAAA,MACV,OAAO,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,CAAA,EAAG,WAAW,MAAA,EAAO;AAAA,MAExD,QAAA,EAAA;AAAA,QAAA,KAAA,IAAS,QAAA,CAAS,MAAA,KAAW,CAAA,oBAC7BE,cAAAA,CAAC,cAAW,OAAA,EAAS,MAAM,KAAK,OAAA,EAAQ,EAAG,CAAA;AAAA,QAE3C,CAAC,KAAA,IAAS,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,6BACnCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACd,QAAA,kBAAAA,cAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,IAAI,CAAA,EACpB,CAAA;AAAA,QAEA,CAAC,SAAS,QAAA,CAAS,MAAA,KAAW,KAAK,CAAC,SAAA,oBAAaA,cAAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,QAC7D,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,qBACnBF,eAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEA,SAAA,EAAU,sBAAA;AAAA,YACV,cAAY,KAAA,CAAM,KAAA;AAAA,YAElB,QAAA,EAAA;AAAA,8BAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA8B,gBAAM,KAAA,EAAM,CAAA;AAAA,8BACzDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,gBAAM,QAAA,CAAS,GAAA,CAAI,CAACY,EAAAA,qBACpBZ,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBAEA,OAAA,EAASY,EAAAA;AAAA,kBACT,QAAA,EAAUA,GAAE,SAAA,KAAc,eAAA;AAAA,kBAC1B,SAAA,EAAWA,GAAE,SAAA,KAAc,gBAAA;AAAA,kBAC3B,WAAA,EAAa,mBAAA,EAAqB,GAAA,CAAIA,EAAAA,CAAE,SAAS,CAAA,IAAK,KAAA;AAAA,kBACtD,mBAAA,EACC,2BAAA,EAA6B,GAAA,CAAIA,EAAAA,CAAE,SAAS,CAAA,IAAK,KAAA;AAAA,kBAElD,QAAA,EAAU;AAAA,iBAAA;AAAA,gBARLA,EAAAA,CAAE;AAAA,eAUR,CAAA,EACF;AAAA;AAAA,WAAA;AAAA,UAnBK,KAAA,CAAM;AAAA,SAqBZ,CAAA;AAAA,QACA,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,OAAA,oBACvBZ,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACA,SAAA;AAAA,YACA,OAAA,EAAS,MAAM,KAAK,QAAA;AAAS;AAAA,SAC9B;AAAA,QAEA,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,KAAA,oBACvBA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,KAAA;AAAA,YACX,KAAA,EAAM,OAAA;AAAA,YACN,OAAA,EAAS,MAAM,KAAK,OAAA;AAAQ;AAAA;AAC7B;AAAA;AAAA,GAEF;AAEF;AAEA,SAAS,UAAA,CAAW;AAAA,EACnB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACD,CAAA,EAOG;AAIF,EAAA,IAAI,UAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,WAAA,EAAa;AAChB,IAAA,UAAA,mBACCF,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,0DAAA;AAAA,QACV,aAAA,EAAW,IAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA8B,CAAA;AAAA,0BAC9CA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC;AAAA;AAAA;AAAA,KACjD;AAED,IAAA,WAAA,GAAc,SAAA;AAAA,EACf,WAAW,mBAAA,EAAqB;AAC/B,IAAA,UAAA,mBACCA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,0DAAA;AAAA,QACV,aAAA,EAAW,IAAA;AAAA,QAEX,0BAAAA,cAAAA,CAACkB,iBAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,GAAA,EAAK;AAAA;AAAA,KACpC;AAED,IAAA,WAAA,GAAc,eAAA;AAAA,EACf,WAAW,SAAA,EAAW;AACrB,IAAA,UAAA,mBACClB,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,4BAAA,EAA6B,CAAA;AAE1D,IAAA,WAAA,GAAc,SAAA;AAAA,EACf;AAEA,EAAA,uBACCA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,QAAA,CAAS,OAAO,CAAA;AAAA,MAC/B,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,QAAA,IAAY,WAAW,CAAA;AAAA,MAC3D,KAAA,EACC,cACG,CAAA,EAAG,OAAA,CAAQ,gBAAgB,kBAAkB,CAAA,QAAA,EAAM,WAAW,CAAA,CAAA,GAC9D,OAAA,CAAQ,YAAA;AAAA,MAEZ,WAAA,EAAW,aAAa,WAAA,IAAe,MAAA;AAAA,MAEvC,QAAA,kBAAAF,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACf,QAAA,EAAA;AAAA,wBAAAE,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EACd,QAAA,EAAA,OAAA,CAAQ,gBAAgB,kBAAA,EAC1B,CAAA;AAAA,QACC;AAAA,OAAA,EACF;AAAA;AAAA,GACD;AAEF;AAEA,SAAS,UAAA,GAAa;AACrB,EAAA,uBACCF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,IAAA,EACrD,QAAA,kBAAAA,cAAAA,CAACmB,yBAAA,EAAA,EAAc,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACAnB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAA6B,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,oBAC3DA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAA4B,QAAA,EAAA,8DAAA,EAE3C;AAAA,GAAA,EACD,CAAA;AAEF;AAEA,SAAS,UAAA,CAAW,EAAE,OAAA,EAAQ,EAA4B;AACzD,EAAA,uBACCF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oBAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,IAAA,EACrD,QAAA,kBAAAA,cAAAA,CAACoB,uBAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EACxB,CAAA;AAAA,oBACApB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAA6B,QAAA,EAAA,wBAAA,EAAsB,CAAA;AAAA,oBAClEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAA4B,QAAA,EAAA,sCAAA,EAE3C,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,KAAA;AAAA,QACX,KAAA,EAAM,WAAA;AAAA,QACN,IAAA,kBAAMA,cAAAA,CAACqB,qBAAA,EAAA,EAAU,MAAM,EAAA,EAAI,CAAA;AAAA,QAC3B,OAAA,EAAS;AAAA;AAAA;AACV,GAAA,EACD,CAAA;AAEF;AAEA,SAAS,cAAA,CAAe;AAAA,EACvB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACD,CAAA,EAKG;AACF,EAAA,uBACCrB,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAU,0BAAA;AAAA,MAET,sCACAA,cAAAA,CAAC,WAAQ,CAAA,mBAETF,gBAAAwB,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDtB,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,IAAS,oBAAA,EAAqB;AAAA,OAAA,EACtC;AAAA;AAAA,GAEF;AAEF;AAEA,SAAS,OAAA,CAAQ,EAAE,IAAA,GAAO,EAAA,EAAG,EAAsB;AAClD,EAAA,uBACCA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACA,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAU,wBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,QAAQ,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAK,IAAA,GAAO,CAAC,CAAC,CAAA,kCAAA,CAAA;AAAA,QAClC,cAAA,EAAgB,yBAAA;AAAA,QAChB,OAAA,EAAS,cAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACZ;AAAA,GACD;AAEF;AAEA,SAAS,mBAAA,CACR,UACA,GAAA,EACqB;AACrB,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA8B;AACjD,EAAA,MAAM,gBAAoC,EAAC;AAE3C,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC/B,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA;AAEtC,IAAA,IAAI,QAAA,EAAU;AACb,MAAA,QAAA,CAAS,QAAA,CAAS,KAAK,OAAO,CAAA;AAC9B,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,KAAA,GAA0B;AAAA,MAC/B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAA,EAAU,CAAC,OAAO;AAAA,KACnB;AAEA,IAAA,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AAC5B,IAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,aAAA;AACR;AAEA,SAAS,oBAAA,CACR,KACA,GAAA,EAC0C;AAC1C,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACjC,IAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACd,KAAK,WAAA,EAAY;AAAA,IACjB,MAAA,CAAO,KAAK,QAAA,EAAS,GAAI,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,IAC3C,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA,GACvC,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY,EAAG,IAAA,CAAK,QAAA,EAAS,EAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,GAAA,CAAI,WAAA,EAAY,EAAG,GAAA,CAAI,QAAA,EAAS,EAAG,GAAA,CAAI,OAAA,EAAS,CAAA;AACvE,EAAA,MAAM,UAAU,IAAA,CAAK,KAAA;AAAA,IAAA,CACnB,KAAA,CAAM,OAAA,EAAQ,GAAI,UAAA,CAAW,SAAQ,IAAK;AAAA,GAC5C;AAEA,EAAA,IAAI,WAAW,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAO,OAAA,EAAQ;AACvD,EAAA,IAAI,YAAY,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAO,WAAA,EAAY;AAC5D,EAAA,IAAI,UAAU,CAAA,EAAG;AAChB,IAAA,OAAO;AAAA,MACN,GAAA,EAAK,MAAA;AAAA,MACL,OAAO,IAAA,CAAK,kBAAA,CAAmB,QAAW,EAAE,OAAA,EAAS,QAAQ;AAAA,KAC9D;AAAA,EACD;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,EAAY,KAAM,IAAI,WAAA,EAAY;AACxD,EAAA,OAAO;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAW;AAAA,MACzC,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,IAAA,EAAM,WAAW,MAAA,GAAY;AAAA,KAC7B;AAAA,GACF;AACD;ACnzBO,SAAS,UAAA,CAAW;AAAA,EAC1B,SAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA,GAAmB,KAAA;AAAA,EACnB;AACD,CAAA,EAAoB;AACnB,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIM,eAAS,KAAK,CAAA;AAE5D,EAAA,MAAM,sBAAsB,MAAM;AACjC,IAAA,IAAI,aAAa,eAAA,EAAiB;AACjC,MAAAiB,qBAAA,CAAU,UAAU,SAAS,CAAA;AAC7B,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,UAAA,CAAW,MAAM,kBAAA,CAAmB,KAAK,CAAA,EAAG,GAAI,CAAA;AAChD,MAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC1B;AAAA,EACD,CAAA;AAEA,EAAA,uBACCzB,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOyB,QAAO,SAAA,EACnB,QAAA,EAAA;AAAA,oBAAA1B,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOyB,QAAO,IAAA,EACnB,QAAA,EAAA;AAAA,sBAAAxB,eAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOuB,OAAAA,CAAO,OAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,MAC9B,SAAA,oBACA1B,eAAAA,CAAC2B,qBAAA,EAAA,EAAU,SAAS,mBAAA,EAAqB,KAAA,EAAOD,QAAO,WAAA,EACtD,QAAA,EAAA;AAAA,wBAAAxB,cAAAA,CAACC,kBAAA,EAAK,KAAA,EAAOuB,QAAO,WAAA,EAClB,QAAA,EAAA,SAAA,CAAU,SAAS,EAAA,GACjB,CAAA,EAAG,UAAU,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA,EAAI,UAAU,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA,GACnD,SAAA,EACJ,CAAA;AAAA,QACC,kCACAxB,cAAAA,CAACC,gBAAAA,EAAA,EAAK,OAAOuB,OAAAA,CAAO,QAAA,EAAU,QAAA,EAAA,QAAA,EAAM,CAAA,mBAEpCxB,cAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOuB,OAAAA,CAAO,UAAU,QAAA,EAAA,MAAA,EAAI;AAAA,OAAA,EAEpC;AAAA,KAAA,EAEF,CAAA;AAAA,oBACA1B,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOyB,QAAO,KAAA,EAClB,QAAA,EAAA;AAAA,MAAA,gBAAA,IAAoB,gCACpBxB,cAAAA,CAACyB,qBAAA,EAAA,EAAU,OAAA,EAAS,cAAc,KAAA,EAAOD,OAAAA,CAAO,GAAA,EAC/C,QAAA,kBAAAxB,eAACC,gBAAAA,EAAA,EAAK,OAAOuB,OAAAA,CAAO,OAAA,EAAS,mBAAK,CAAA,EACnC,CAAA;AAAA,MAEA;AAAA,KAAA,EACF;AAAA,GAAA,EACD,CAAA;AAEF;AAEA,IAAMA,OAAAA,GAAStB,uBAAW,MAAA,CAAO;AAAA,EAChC,SAAA,EAAW;AAAA,IACV,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,iBAAA,EAAmB,EAAA;AAAA,IACnB,MAAA,EAAQ,EAAA;AAAA,IACR,iBAAA,EAAmB,CAAA;AAAA,IACnB,iBAAA,EAAmB,kBAAA;AAAA,IACnB,eAAA,EAAiB;AAAA,GAClB;AAAA,EACA,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,EAAE;AAAA,EAC7B,OAAO,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,QAAA,EAAU,KAAK,CAAA,EAAE;AAAA,EAC5D,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,KAAA,EAAO,OAAO,MAAA,EAAO;AAAA,EACxD,WAAA,EAAa;AAAA,IACZ,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,CAAA;AAAA,IACL,SAAA,EAAW;AAAA,GACZ;AAAA,EACA,aAAa,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,MAAA,EAAQ,YAAY,OAAA,EAAQ;AAAA,EAChE,QAAA,EAAU,EAAE,QAAA,EAAU,CAAA,EAAG,OAAO,MAAA,EAAO;AAAA,EACvC,GAAA,EAAK;AAAA,IACJ,iBAAA,EAAmB,EAAA;AAAA,IACnB,eAAA,EAAiB,CAAA;AAAA,IACjB,YAAA,EAAc,CAAA;AAAA,IACd,WAAA,EAAa,CAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACd;AAAA,EACA,OAAA,EAAS,EAAE,QAAA,EAAU,EAAA,EAAI,OAAO,MAAA;AACjC,CAAC,CAAA;;;;AC/ED,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAM,gBAAA,GAAmB,SAAA;AACzB,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,QAAA,GAAW,GAAA;AAEV,SAAS,QAAA,CAAS;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ;AACT,CAAA,EAAkB;AACjB,EAAA,MAAM,SAAA,GAAYO,YAAAA,CAA6B,EAAE,CAAA;AACjD,EAAA,MAAM,YAAYA,YAAAA,CAAO,IAAIiB,qBAAS,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,OAAA;AAChD,EAAA,MAAM,YAAYjB,YAAAA,CAAO,IAAIiB,qBAAS,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,OAAA;AAChD,EAAA,MAAM,UAAA,GAAajB,aAAO,CAAC,CAAA;AAC3B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIH,eAAS,KAAK,CAAA;AAExD,EAAA,MAAM,aAAA,GACL,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,SAAA,GAAY,CAAA,GACxC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,oBAAoB,CAAA,GACxC,kBAAA;AAEJ,EAAA,MAAM,MAAA,GAAS,KAAA,CACb,KAAA,CAAM,EAAE,EACR,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,aAAa,CAAA;AAExB,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,KAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,KAAK,CAAA;AAGnE,EAAAC,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,QAAA,EAAU;AACd,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IAC7B;AAAA,EACD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,KAAA,EAAO;AACX,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA;AAAA,IACD;AACA,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAAmB,oBAAA,CAAS,QAAA,CAAS;AAAA,MACjBA,oBAAA,CAAS,MAAA,CAAO,SAAA,EAAW,EAAE,OAAA,EAAS,GAAG,QAAA,EAAU,QAAA,EAAU,eAAA,EAAiB,IAAA,EAAM,CAAA;AAAA,MACpFA,oBAAA,CAAS,MAAA,CAAO,SAAA,EAAW,EAAE,OAAA,EAAS,GAAG,QAAA,EAAU,CAAA,EAAG,eAAA,EAAiB,IAAA,EAAM;AAAA,KAC7E,EAAE,KAAA,EAAM;AAAA,EACV,CAAA,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAGrB,EAAAnB,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,IAAU,UAAA,CAAW,OAAA,GAAU,aAAA,EAAe;AACjD,MAAAmB,oBAAA,CAAS,QAAA,CAAS;AAAA,QACjBA,oBAAA,CAAS,MAAA,CAAO,SAAA,EAAW,EAAE,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,iBAAA,GAAoB,GAAA,EAAK,eAAA,EAAiB,IAAA,EAAM,CAAA;AAAA,QACtGA,oBAAA,CAAS,MAAA,CAAO,SAAA,EAAW,EAAE,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,iBAAA,GAAoB,GAAA,EAAK,eAAA,EAAiB,IAAA,EAAM;AAAA,OACnG,EAAE,KAAA,EAAM;AAAA,IACV;AACA,IAAA,UAAA,CAAW,UAAU,KAAA,CAAM,MAAA;AAAA,EAC5B,GAAG,CAAC,MAAA,EAAQ,MAAM,MAAA,EAAQ,aAAA,EAAe,SAAS,CAAC,CAAA;AAEnD,EAAA,MAAM,cAAA,GAAiB,UAAU,WAAA,CAAY;AAAA,IAC5C,UAAA,EAAY,CAAC,CAAA,EAAG,IAAA,EAAM,KAAK,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,CAAC,CAAA;AAAA,IAClD,WAAA,EAAa,CAAC,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAC;AAAA,GACvC,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAkB;AACrC,IAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,aAAA,EAAe;AACxC,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,EAAG,KAAA,EAAM;AAAA,IACjC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,SAAA,KAAwB;AAC5C,IAAA,QAAA,CAAS,UAAU,IAAA,CAAK,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,IAAA,KAAiB;AACrD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AAC7C,MAAA,MAAMC,UAAAA,GAAY,MAAA,CAChB,KAAA,CAAM,EAAE,EACR,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,aAAa,CAAA;AACxB,MAAA,WAAA,CAAYA,UAAS,CAAA;AACrB,MAAA,UAAA,CAAW,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAC,CAAA;AACrD,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA;AAC7B,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AACnB,IAAA,WAAA,CAAY,SAAS,CAAA;AAErB,IAAA,IAAI,IAAA,IAAQ,KAAA,GAAQ,aAAA,GAAgB,CAAA,EAAG;AACtC,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAe,GAAA,KAAgB;AACtD,IAAA,IAAI,QAAQ,WAAA,EAAa;AACxB,MAAA,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAClB,QAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,QAAA,SAAA,CAAU,KAAK,CAAA,GAAI,EAAA;AACnB,QAAA,WAAA,CAAY,SAAS,CAAA;AAAA,MACtB,CAAA,MAAA,IAAW,QAAQ,CAAA,EAAG;AACrB,QAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,QAAA,SAAA,CAAU,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AACvB,QAAA,WAAA,CAAY,SAAS,CAAA;AACrB,QAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,MACrB;AAAA,IACD;AAAA,EACD,CAAA;AAEA,EAAA,uBACC3B,cAAAA;AAAA,IAAC0B,oBAAA,CAAS,IAAA;AAAA,IAAT;AAAA,MACA,KAAA,EAAO;AAAA,QACN,CAAA,CAAE,SAAA;AAAA,QACF,EAAE,SAAA,EAAW,CAAC,EAAE,UAAA,EAAY,cAAA,EAAe,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAE,OACrE;AAAA,MAEC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,sBACnB1B,cAAAA;AAAA,QAAC4B,qBAAA;AAAA,QAAA;AAAA,UAEA,GAAA,EAAK,CAAC,EAAA,KAAO;AAAE,YAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,UAAI,CAAA;AAAA,UAC1C,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,QAAA;AAAA,UACX,YAAA,EAAa,YAAA;AAAA,UACb,SAAA,EAAW,CAAA;AAAA,UACX,YAAA,EAAc,CAAC,IAAA,KAAS,YAAA,CAAa,GAAG,IAAI,CAAA;AAAA,UAC5C,UAAA,EAAY,CAAC,EAAE,WAAA,OAAkB,cAAA,CAAe,CAAA,EAAG,YAAY,GAAG,CAAA;AAAA,UAClE,OAAA,EAAS,MAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,cAAA,CAAe,EAAE,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,IAAK,CAAA;AAAA,UACvF,KAAA,EAAO;AAAA,YACN,CAAA,CAAE,KAAA;AAAA,YACF,YAAY,CAAA,CAAE,aAAA;AAAA,YACd,iBAAiB,CAAA,CAAE;AAAA,WACpB;AAAA,UACA,kBAAA,EAAoB,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA;AAAA,SAAA;AAAA,QAd7B;AAAA,OAgBN;AAAA;AAAA,GACF;AAEF;AAEA,IAAM,UAAA,GAAa;AAAA,EAClB,EAAA,EAAI,SAAA;AAAA,EACJ,MAAA,EAAQ,iBAAA;AAAA,EACR,EAAA,EAAI,SAAA;AAAA,EACJ,UAAA,EAAY;AACb,CAAA;AAEA,IAAM,CAAA,GAAI1B,uBAAW,MAAA,CAAO;AAAA,EAC3B,WAAW,EAAE,aAAA,EAAe,OAAO,GAAA,EAAK,CAAA,EAAG,gBAAgB,QAAA,EAAS;AAAA,EACpE,KAAA,EAAO;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,QAAA;AAAA,IACX,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,aAAa,UAAA,CAAW,MAAA;AAAA,IACxB,YAAA,EAAc,EAAA;AAAA,IACd,OAAO,UAAA,CAAW,EAAA;AAAA,IAClB,iBAAiB,UAAA,CAAW;AAAA,GAC7B;AAAA,EACA,eAAe,EAAE,eAAA,EAAiB,UAAA,CAAW,UAAA,EAAY,SAAS,GAAA,EAAI;AAAA,EACtE,UAAA,EAAY;AAAA,IACX,WAAA,EAAa,gBAAA;AAAA,IACb,WAAA,EAAa;AAAA;AAEf,CAAC,CAAA;;;AC/KM,IAAM,aAAA,GAAgB;AAAA,EAGpB;AAAA,EAER,WAAA,EAAa,YAAA;AAAA,EACb,eAAA,EAAiB,gBAAA;AAAA;AAAA,EAEjB,MAAA,EAAQ;AACT,CAAA;AAEO,IAAM,2BAAA,GAA8B,EAAA;AAEpC,IAAM,sBAAA,GAAyB,CAAA;AAC/B,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,kBAAA,GAAqB,EAAA;AAG3B,IAAM,yBAAA,GAA4B,IAAA;AAElC,IAAM,aAAA,GAAgB;AAAA,EAE5B,eAAA,EAAiB,cAAA;AAAA,EACjB,cAAA,EAAgB,cAAA;AAAA,EAChB,cAAA,EAAgB,cAAA;AAAA,EAChB,mBAAA,EAAqB,eAAA;AAAA,EACrB,iBAAA,EAAmB,YAAA;AAAA,EACnB,gBAAA,EAAkB;AACnB,CAAA;;;AClBO,SAAS,wBACf,MAAA,EACwB;AACxB,EAAA,MAAM,aAAa,MAAA,EAAQ,UAAA;AAC3B,EAAA,MAAM,MAAM,UAAA,EAAY,GAAA;AACxB,EAAA,MAAM,eAAe,GAAA,EAAK,SAAA;AAC1B,EAAA,MAAM,kBAAkB,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,GAClD,MAAA,CAAO,YAAY,CAAA,GACnB,sBAAA;AACH,EAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA;AAAA,IAC7B,kBAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,eAAe;AAAA,GAC7C;AAEA,EAAA,OAAO;AAAA,IACN,SAAA,EAAW;AAAA,GACZ;AACD;AAKO,SAAS,uBAAuB,MAAA,EAAwB;AAC9D,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,EAAE,EAAE,IAAA,EAAK;AACjD,EAAA,MAAM,CAAA,GAAI,OAAO,UAAU,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AACxB,IAAA,OAAO,OAAO,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA,GAAS,IAAI,MAAM,CAAA,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IACrC,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACV,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA;AACZ;ACdA,IAAM,kBAAA,GAAqB,SAAA;AAE3B,IAAM,MAAA,GAAS;AAAA,EAGd,UAAA,EAAY,SAAA;AAAA,EACZ,eAAA,EAAiB,SAAA;AAAA,EAEjB,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,aAAA,EAAe;AAChB,CAAA;AAEA,IAAM,EAAE,KAAA,EAAO,YAAA,EAAa,GAAI2B,sBAAA,CAAW,IAAI,QAAQ,CAAA;AACvD,IAAM,gBAAA,GAAmB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,eAAe,IAAI,CAAA;AAC1D,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAM,kBAAA,GAAqB,GAAA;AAEpB,SAAS,eAAA,CAAgB;AAAA,EAC/B,MAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAAyB;AACxB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIvB,eAAS,EAAE,CAAA;AACjC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAElC,IAAI,CAAA;AACN,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,uBAAA,EAAyB,0BAA0B,CAAA,GAAIA,eAAS,CAAC,CAAA;AACxE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,oBAAA,GAAuBG,aAAe,EAAE,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,mBAAA,GAAsBA,aAAO,CAAC,CAAA;AAEpC,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AAEzE,EAAAF,gBAAU,MAAM;AACf,IAAA,MAAM,OAAOuB,oBAAA,CAAS,WAAA;AAAA,MACrBC,oBAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,kBAAA,GAAqB,iBAAA;AAAA,MAC7C,MAAM,mBAAmB,IAAI;AAAA,KAC9B;AACA,IAAA,MAAM,OAAOD,oBAAA,CAAS,WAAA;AAAA,MACrBC,oBAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,kBAAA,GAAqB,iBAAA;AAAA,MAC7C,MAAM,mBAAmB,KAAK;AAAA,KAC/B;AACA,IAAA,OAAO,MAAM;AACZ,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACb,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBvB,kBAAY,MAAM;AAC1C,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAD,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,0BAAA,CAA2B,2BAA2B,CAAA;AAAA,IACvD,CAAA,MAAO;AACN,MAAA,MAAA,CAAO,EAAE,CAAA;AACT,MAAA,gBAAA,EAAiB;AACjB,MAAA,0BAAA,CAA2B,CAAC,CAAA;AAC5B,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA,oBAAA,CAAqB,OAAA,GAAU,EAAA;AAC/B,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,MAAA,mBAAA,CAAoB,OAAA,IAAW,CAAA;AAAA,IAChC;AAAA,EACD,CAAA,EAAG,CAAC,MAAA,EAAQ,gBAAgB,CAAC,CAAA;AAE7B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,2BAA2B,CAAA,EAAG;AAClC,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACb,MAAM,0BAAA,CAA2B,CAAC,IAAA,KAAS,OAAO,CAAC,CAAA;AAAA,MACnD;AAAA,KACD;AACA,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,uBAAuB,CAAC,CAAA;AAG5B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACxB,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,MAAM,CAAA,GAAI,WAAW,MAAM;AAC1B,QAAA,WAAA,CAAY,KAAK,CAAA;AACjB,QAAA,MAAA,CAAO,EAAE,CAAA;AACT,QAAA,gBAAA,EAAiB;AAAA,MAClB,GAAG,kBAAkB,CAAA;AACrB,MAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,IAC5B;AAAA,EACD,CAAA,EAAG,CAAC,eAAA,EAAiB,gBAAgB,CAAC,CAAA;AAEtC,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAC9B,IAAA,IAAI,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,QAAA,EAAU;AACzD,IAAA,MAAM,OAAA,GAAU,UAAA;AAAA,MACf,MAAM,gBAAA,EAAiB;AAAA,MACvB;AAAA,KACD;AACA,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EAClC,GAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAEvD,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,iBAAA,EAAmB;AACnC,IAAA,IAAI,GAAA,CAAI,WAAW,MAAA,CAAO,SAAA,IAAa,CAAC,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AAC1D,MAAA;AAAA,IACD;AACA,IAAA,IAAI,YAAA,IAAgB,kBAAkB,OAAA,EAAS;AAC/C,IAAA,IAAI,oBAAA,CAAqB,YAAY,GAAA,EAAK;AAE1C,IAAA,oBAAA,CAAqB,OAAA,GAAU,GAAA;AAC/B,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,MAAM,mBAAmB,mBAAA,CAAoB,OAAA;AAE7C,IAAA,KAAA,CAAM,YAAY;AACjB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,aAAA,CAAc,SAAS,CAAA;AACvB,MAAA,IAAI;AACH,QAAA,MAAM,UAAU,GAAG,CAAA;AAAA,MACpB,CAAA,CAAA,MAAQ;AACP,QAAA,IAAI,mBAAA,CAAoB,YAAY,gBAAA,EAAkB;AACtD,QAAA,gBAAA,EAAiB;AACjB,QAAA,oBAAA,CAAqB,OAAA,GAAU,GAAA;AAAA,MAChC,CAAA,SAAE;AACD,QAAA,IAAI,mBAAA,CAAoB,YAAY,gBAAA,EAAkB;AACtD,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAAA,MAC7B;AAAA,IACD,CAAA,GAAG;AAAA,EACJ,CAAA,EAAG;AAAA,IACF,GAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,MAAA,CAAO,SAAA;AAAA,IACP,SAAA;AAAA,IACA;AAAA,GACA,CAAA;AAED,EAAA,MAAM,YAAA,GAAeC,kBAAY,YAAY;AAC5C,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,IAAI;AACH,MAAA,MAAM,QAAA,EAAS;AAAA,IAChB,CAAA,CAAA,MAAQ;AACP,MAAA,gBAAA,EAAiB;AAAA,IAClB;AAAA,EACD,CAAA,EAAG,CAAC,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAE/B,EAAA,MAAM,YAAA,GAAeA,kBAAY,YAAY;AAC5C,IAAA,IAAI,0BAA0B,CAAA,EAAG;AACjC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,IAAI;AACH,MAAA,MAAM,QAAA,EAAS;AACf,MAAA,0BAAA,CAA2B,2BAA2B,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AAAA,IACR,CAAA,SAAE;AACD,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA,EAAG,CAAC,uBAAA,EAAyB,QAAQ,CAAC,CAAA;AAEtC,EAAA,IAAI,CAAC,mBAAmB,OAAO,IAAA;AAE/B,EAAA,MAAM,YACL,iBAAA,CAAkB,cAAA,KAAmB,sBACrC,OAAA,CAAQ,iBAAA,CAAkB,UAAU,MAAM,CAAA;AAC3C,EAAA,MAAM,UACL,iBAAA,CAAkB,cAAA,KAAmB,oBACrC,OAAA,CAAQ,iBAAA,CAAkB,UAAU,SAAS,CAAA;AAE9C,EAAA,MAAM,WAAA,GAAc,eAAe,SAAA,IAAa,YAAA;AAChD,EAAA,MAAM,YAAA,GAAe,eAAe,QAAA,IAAY,YAAA;AAChD,EAAA,MAAM,aAAA,GAAgB,kBAAkB,UAAA,GAAa,QAAA;AAErD,EAAA,uBACCR,cAAAA;AAAA,IAACgC,iBAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAc,MAAA;AAAA,MACd,gBAAgB,MAAM;AAAA,MAAC,CAAA;AAAA,MACvB,oBAAA,EAAsBD,qBAAS,EAAA,KAAO,SAAA;AAAA,MAEtC,QAAA,kBAAA/B,cAAAA;AAAA,QAACiC,gCAAA;AAAA,QAAA;AAAA,UACA,OAAO,CAACrB,EAAAA,CAAE,eAAe,EAAE,cAAA,EAAgB,eAAe,CAAA;AAAA,UAC1D,QAAA,EAAUmB,oBAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,SAAA,GAAY,QAAA;AAAA,UAC9C,sBAAA,EAAwBA,oBAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,CAAA,GAAI,EAAA;AAAA,UAEpD,QAAA,kBAAA/B,cAAAA,CAACD,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACa,EAAAA,CAAE,YAAA,EAAc,EAAE,cAAA,EAAgB,aAAA,EAAe,GAC9D,QAAA,kBAAAZ,cAAAA;AAAA,YAACkC,sBAAA;AAAA,YAAA;AAAA,cACA,qBAAA,EAAuB;AAAA,gBACtBtB,EAAAA,CAAE,aAAA;AAAA,gBACF,EAAE,gBAAgB,aAAA;AAAc,eACjC;AAAA,cACA,4BAAA,EAA8B,KAAA;AAAA,cAC9B,yBAAA,EAA0B,SAAA;AAAA,cAE3B,QAAA,kBAAAd,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACa,EAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,gBAAA,EAAkB,CAAA,EAClD,QAAA,EAAA;AAAA,gCAAAZ,cAAAA;AAAA,kBAACyB,qBAAAA;AAAA,kBAAA;AAAA,oBACA,OAAA,EAAS,YAAA;AAAA,oBACT,QAAA,EAAU,YAAA;AAAA,oBACV,OAAOb,EAAAA,CAAE,QAAA;AAAA,oBACT,kBAAA,EAAmB,OAAA;AAAA,oBACnB,OAAA,EAAS,CAAA;AAAA,oBAER,QAAA,EAAA,CAAC,EAAE,OAAA,EAAQ,qBACXZ,cAAAA;AAAA,sBAACgB,mBAAAA;AAAA,sBAAA;AAAA,wBACA,IAAA,EAAM,EAAA;AAAA,wBACN,OACC,OAAA,IAAW,CAAC,YAAA,GACT,MAAA,CAAO,aACP,MAAA,CAAO,eAAA;AAAA,wBAEX,WAAA,EAAa;AAAA;AAAA;AACd;AAAA,iBAEF;AAAA,gCAEAhB,cAAAA;AAAA,kBAACC,gBAAAA;AAAA,kBAAA;AAAA,oBACA,OAAOW,EAAAA,CAAE,WAAA;AAAA,oBACT,kBAAA,EAAmB,mBAAA;AAAA,oBAElB,QAAA,EAAA,iBAAA,CAAkB;AAAA;AAAA,iBACpB;AAAA,gBAEC,SAAA,mBACAZ,cAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOW,EAAAA,CAAE,aAAA,EAAe,QAAA,EAAA,KAAA,EAAG,CAAA,GAC9B,IAAA;AAAA,gBAEH,aAAa,iBAAA,CAAkB,QAAA,EAAU,MAAA,mBACzCZ,eAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOW,EAAAA,CAAE,YACb,QAAA,EAAA,sBAAA,CAAuB,iBAAA,CAAkB,QAAA,CAAS,MAAM,GAC1D,CAAA,GACG,IAAA;AAAA,gBAEH,OAAA,mBACAZ,cAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOW,EAAAA,CAAE,aAAA,EAAe,QAAA,EAAA,cAAA,EAAY,CAAA,GACvC,IAAA;AAAA,gBAEH,OAAA,IAAW,iBAAA,CAAkB,QAAA,EAAU,SAAA,mBACvCd,gBAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOa,EAAAA,CAAE,aAAA,EACd,QAAA,EAAA;AAAA,kCAAAZ,cAAAA,CAACC,kBAAA,EAAK,KAAA,EAAOW,GAAE,aAAA,EACb,QAAA,EAAA,iBAAA,CAAkB,SAAS,SAAA,EAC7B,CAAA;AAAA,kBACC,iBAAA,CAAkB,QAAA,CAAS,SAAA,mBAC3BZ,cAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOW,EAAAA,CAAE,aAAA,EACb,QAAA,EAAA,iBAAA,CAAkB,QAAA,CAAS,WAC7B,CAAA,GACG;AAAA,iBAAA,EACL,CAAA,GACG,IAAA;AAAA,gCAEJd,gBAACC,gBAAAA,EAAA,EAAK,OAAOa,EAAAA,CAAE,OAAA,EAAS,oBAAmB,iBAAA,EAC1C,QAAA,EAAA;AAAA,kCAAAZ,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACA,KAAA,EAAO,GAAA;AAAA,sBACP,QAAA,EAAU,MAAA;AAAA,sBACV,WAAW,MAAA,CAAO,SAAA;AAAA,sBAClB,QAAA,EAAU,YAAA;AAAA,sBACV,KAAA,EAAO;AAAA;AAAA,mBACR;AAAA,kBACC,8BACAF,eAAAA,CAACC,kBAAA,EAAK,KAAA,EAAOa,GAAE,YAAA,EACd,QAAA,EAAA;AAAA,oCAAAZ,cAAAA;AAAA,sBAACmC,6BAAA;AAAA,sBAAA;AAAA,wBACA,IAAA,EAAK,OAAA;AAAA,wBACL,KAAA,EAAO;AAAA;AAAA,qBACR;AAAA,oCACAnC,eAACC,gBAAAA,EAAA,EAAK,OAAOW,EAAAA,CAAE,aAAA,EACb,wBAAc,eAAA,EAChB;AAAA,mBAAA,EACD,CAAA,GACG;AAAA,iBAAA,EACL,CAAA;AAAA,gCAEAd,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOa,GAAE,QAAA,EACd,QAAA,EAAA;AAAA,kCAAAZ,cAAAA;AAAA,oBAACyB,qBAAAA;AAAA,oBAAA;AAAA,sBACA,OAAA,EAAS,YAAA;AAAA,sBACT,QAAA,EAAU,gBAAgB,uBAAA,GAA0B,CAAA;AAAA,sBACpD,kBAAA,EAAmB,yBAAA;AAAA,sBACnB,MAAA,EAAO,yBAAA;AAAA,sBAEN,QAAA,EAAA,CAAC,EAAE,OAAA,EAAQ,qBACXzB,cAAAA;AAAA,wBAACC,gBAAAA;AAAA,wBAAA;AAAA,0BACA,KAAA,EAAO;AAAA,4BACNW,EAAAA,CAAE,QAAA;AAAA,4BACF,OAAA,IAAW,EAAE,OAAA,EAAS,GAAA,EAAI;AAAA,4BAAA,CACzB,YAAA,IAAgB,uBAAA,GAA0B,CAAA,KAC1CA,EAAAA,CAAE;AAAA,2BACJ;AAAA,0BAEC,yBAAe,QAAA,mBACfZ,cAAAA,CAAAsB,mBAAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,cAAA,EAChB,CAAA,GACG,uBAAA,GAA0B,IAC7B,CAAA,EAAG,aAAA,CAAc,mBAAmB,CAAA,CAAA,EAAI,uBAAuB,MAE/D,aAAA,CAAc;AAAA;AAAA;AAEhB;AAAA,mBAEF;AAAA,kCAEAtB,cAAAA;AAAA,oBAACyB,qBAAAA;AAAA,oBAAA;AAAA,sBACA,OAAA,EAAS,YAAA;AAAA,sBACT,QAAA,EAAU,YAAA;AAAA,sBACV,kBAAA,EAAmB,yBAAA;AAAA,sBACnB,MAAA,EAAO,yBAAA;AAAA,sBAEN,WAAC,EAAE,OAAA,uBACH3B,eAAAA,CAACC,kBAAA,EAAK,KAAA,EAAO,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAU,GAAA,EAAK,GAAE,EAC1F,QAAA,EAAA;AAAA,wBAAA,YAAA,mBACAC,cAAAA;AAAA,0BAACmC,6BAAA;AAAA,0BAAA;AAAA,4BACA,IAAA,EAAK,OAAA;AAAA,4BACL,OAAO,MAAA,CAAO;AAAA;AAAA,yBACf,GACG,IAAA;AAAA,wCACJnC,cAAAA;AAAA,0BAACC,gBAAAA;AAAA,0BAAA;AAAA,4BACA,KAAA,EAAO;AAAA,8BACNW,EAAAA,CAAE,QAAA;AAAA,8BACF,OAAA,IACC,CAAC,YAAA,IAAgB;AAAA,gCAChB,OAAO,MAAA,CAAO;AAAA,+BACf;AAAA,8BACD,YAAA,IAAgB,CAAC,YAAA,IAAgBA,EAAAA,CAAE;AAAA,6BACpC;AAAA,4BAEC,yBACE,aAAA,CAAc,cAAA,GACd,OAAA,GACC,aAAA,CAAc,SACd,aAAA,CAAc;AAAA;AAAA;AACnB,uBAAA,EACD;AAAA;AAAA;AAEF,iBAAA,EACD,CAAA;AAAA,gCAEAd,eAAAA,CAACC,gBAAAA,EAAA,EAAK,KAAA,EAAOa,GAAE,MAAA,EACd,QAAA,EAAA;AAAA,kCAAAZ,eAACC,gBAAAA,EAAA,EAAK,OAAOW,EAAAA,CAAE,YAAA,EACb,wBAAc,iBAAA,EAChB,CAAA;AAAA,kCACAZ,cAAAA;AAAA,oBAACoC,iBAAA;AAAA,oBAAA;AAAA,sBACA,MAAA,EAAQ,EAAE,GAAA,EAAK,6BAAA,EAAe;AAAA,sBAC9B,OAAOxB,EAAAA,CAAE,UAAA;AAAA,sBACT,UAAA,EAAW,SAAA;AAAA,sBACX,2BAAA,EAA2B,IAAA;AAAA,sBAC3B,yBAAA,EAA0B;AAAA;AAAA,mBAC3B;AAAA,kCACAZ,eAACC,gBAAAA,EAAA,EAAK,OAAOW,EAAAA,CAAE,WAAA,EACb,wBAAc,gBAAA,EAChB;AAAA,iBAAA,EACD;AAAA,eAAA,EACD;AAAA;AAAA,WACA,EACD;AAAA;AAAA;AACD;AAAA,GACD;AAEF;AAEA,IAAMA,EAAAA,GAAIV,uBAAW,MAAA,CAAO;AAAA,EAC3B,aAAA,EAAe;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR;AAAA,EACA,YAAA,EAAc;AAAA,IACb,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,iBAAiB,MAAA,CAAO,aAAA;AAAA,IACxB,UAAA,EAAY,QAAA;AAAA,IACZ,iBAAA,EAAmB,EAAA;AAAA,IACnB,aAAA,EAAe;AAAA,GAChB;AAAA,EACA,aAAA,EAAe;AAAA,IACd,QAAA,EAAU,CAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,QAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,iBAAiB,MAAA,CAAO,IAAA;AAAA,IACxB,YAAA,EAAc,EAAA;AAAA,IACd,UAAA,EAAY,EAAA;AAAA,IACZ,iBAAA,EAAmB,cAAA;AAAA,IACnB,aAAA,EAAe,EAAA;AAAA,IACf,WAAA,EAAa,CAAA;AAAA,IACb,aAAa,MAAA,CAAO;AAAA,GACrB;AAAA,EACA,QAAA,EAAU;AAAA,IACT,QAAA,EAAU,UAAA;AAAA,IACV,KAAA,EAAO,EAAA;AAAA,IACP,GAAA,EAAK,EAAA;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACZ,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,EAAA;AAAA,IACZ,OAAO,MAAA,CAAO,eAAA;AAAA,IACd,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,EAAA;AAAA,IACd,iBAAA,EAAmB;AAAA,GACpB;AAAA,EACA,aAAA,EAAe;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,GAAA;AAAA,IACf,aAAA,EAAe,WAAA;AAAA,IACf,OAAO,MAAA,CAAO,eAAA;AAAA,IACd,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,CAAA;AAAA,IACd,OAAA,EAAS;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACX,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,KAAA,EAAO,kBAAA;AAAA,IACP,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,EAAA;AAAA,IACd,aAAA,EAAe;AAAA,GAChB;AAAA,EACA,aAAA,EAAe;AAAA,IACd,UAAA,EAAY,QAAA;AAAA,IACZ,YAAA,EAAc,EAAA;AAAA,IACd,GAAA,EAAK;AAAA,GACN;AAAA,EACA,aAAA,EAAe;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,KAAA,EAAO,kBAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACZ;AAAA,EACA,aAAA,EAAe;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,GAAA;AAAA,IACf,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO,kBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACR,YAAA,EAAc;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACb,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,CAAA;AAAA,IACL,SAAA,EAAW;AAAA,GACZ;AAAA,EACA,aAAA,EAAe;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,EAAA;AAAA,IACL,YAAA,EAAc;AAAA,GACf;AAAA,EACA,QAAA,EAAU;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,IAAA;AAAA,IACf,OAAO,MAAA,CAAO,eAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACZ;AAAA,EACA,YAAA,EAAc;AAAA,IACb,OAAA,EAAS;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACP,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,QAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAK,CAAA;AAAA,IACL,cAAA,EAAgB,CAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO,MAAA;AAAA,IACvB,UAAA,EAAY;AAAA,GACb;AAAA,EACA,YAAA,EAAc;AAAA,IACb,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,MAAA,CAAO,eAAA;AAAA,IACd,OAAA,EAAS;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACX,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACR;AAAA,EACA,WAAA,EAAa;AAAA,IACZ,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,GAAA;AAAA,IACf,KAAA,EAAO;AAAA;AAET,CAAC,CAAA;;;ACjhBM,SAAS,WAAW,SAAA,EAAkC;AAC5D,EAAA,MAAM,OAAO,OAAO,SAAA,KAAc,WAAW,IAAI,IAAA,CAAK,SAAS,CAAA,GAAI,SAAA;AAEnE,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,EAAQ,GAAI,KAAK,OAAA,EAAQ;AAC5C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAK,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,IAAO,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,KAAQ,CAAA;AAG7C,EAAA,IAAI,WAAW,CAAA,EAAG;AACjB,IAAA,OAAO,UAAA;AAAA,EACR;AAGA,EAAA,IAAI,WAAW,EAAA,EAAI;AAClB,IAAA,OAAO,GAAG,QAAQ,CAAA,KAAA,CAAA;AAAA,EACnB;AAGA,EAAA,IAAI,YAAY,EAAA,EAAI;AACnB,IAAA,OAAO,GAAG,SAAS,CAAA,KAAA,CAAA;AAAA,EACpB;AAGA,EAAA,IAAI,WAAW,CAAA,EAAG;AACjB,IAAA,OAAO,GAAG,QAAQ,CAAA,KAAA,CAAA;AAAA,EACnB;AAGA,EAAA,OAAO,IAAA,CAAK,mBAAmB,OAAA,EAAS;AAAA,IACvC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,MAAM,IAAA,CAAK,WAAA,OAAkB,GAAA,CAAI,WAAA,KAAgB,SAAA,GAAY;AAAA,GAC7D,CAAA;AACF;AClBO,SAAS,kBAAA,CACf,OACA,OAAA,EACO;AACP,EAAA,IAAI,CAAQmC,6BAAU,EAAG;AAEzB,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,WAAA;AACpD,EAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,IAAA,CAAK,SAAA,GAAY,OAAA,CAAQ,SAAA;AAChD,EAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA;AACxC,EAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAExC,EAAA,IAAI,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,UAAA,GAAa,OAAA,CAAQ,UAAA;AAClD,EAAA,IAAI,OAAA,CAAQ,aAAA,EAAe,IAAA,CAAK,aAAA,GAAgB,OAAA,CAAQ,aAAA;AAExD,EAAA,MAAM,QAAA,GAAW;AAAA,IAChB,YAAA,EAAc;AAAA,MACb,SAAA,EAAW,QAAQ,SAAA,IAAa,IAAA;AAAA,MAChC,cAAA,EAAgB,QAAQ,cAAA,IAAkB,IAAA;AAAA,MAC1C,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA;AAAA,MACpC,YAAA,EAAc,QAAQ,YAAA,IAAgB,IAAA;AAAA,MACtC,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,MACxB,UAAA,EAAY,QAAQ,UAAA,IAAc,IAAA;AAAA,MAClC,aAAA,EAAe,QAAQ,aAAA,IAAiB;AAAA;AACzC,GACD;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC9B,IAAOA,iCAAe,KAAA,EAAO,EAAE,OAAO,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,EAChE,CAAA,MAAO;AACN,IAAOA,iBAAA,CAAA,gBAAA,CAAiB,KAAA,EAAO,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EAClD;AACD;AC5BO,SAAS,YAAA,CAAa;AAAA,EAC5B,MAAA;AAAA,EACA,YAAY,EAAC;AAAA,EACb,cAAA,GAAiB,cAAA;AAAA,EACjB,UAAA,GAAa,IAAA;AAAA,EACb,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,GAAA;AAAA,EACd,YAAA,GAAe,GAAA;AAAA,EACf,WAAA,GAAc,cAAA;AAAA,EACd,cAAA,GAAiB,6BAAA;AAAA,EACjB,YAAA,GAAe,WAAA;AAAA,EACf,WAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,qBAAA,GAAwB;AACzB,CAAA,EAAsB;AACrB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI/B,eAAS,WAAW,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAE1C,EAAA,MAAM,cAAc,EAAE,EAAA,EAAI,aAAa,EAAA,EAAI,WAAA,EAAa,IAAI,WAAA,EAAY;AACxE,EAAA,MAAM,YAAY,EAAE,EAAA,EAAI,WAAW,EAAA,EAAI,SAAA,EAAW,IAAI,SAAA,EAAU;AAEhE,EAAA,MAAM,SAAA,GAAY;AAAA,IACjB,cAAA,EAAgB,kBAAA;AAAA,IAChB,aAAA,EAAe,iBAAA;AAAA,IACf,WAAA,EAAa,eAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb;AAEA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACvB,cAAA,EAAgB,yBAAA;AAAA,IAChB,aAAA,EAAe,wBAAA;AAAA,IACf,WAAA,EAAa,sBAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb;AAEA,EAAA,uBACCR,eAAAA,CAAAwB,mBAAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAxB,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACV,uCAAA;AAAA,UACA,uEAAA;AAAA,UACA,mEAAA;AAAA,UACA,YAAY,UAAU,CAAA;AAAA,UACtB,UAAU,cAAc,CAAA;AAAA,UACxB,CAAC,WAAA,IAAe;AAAA,SACjB;AAAA,QACA,OAAO,WAAA,GAAc,EAAE,YAAY,WAAA,EAAa,KAAA,EAAO,QAAO,GAAI,MAAA;AAAA,QAClE,YAAA,EAAY,SAAS,YAAA,GAAe,WAAA;AAAA,QAEnC,QAAA,EAAA;AAAA,UAAA,qBAAA,IAAyB,CAAC,MAAA,oBAC1BE,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yFAAA,EAA0F,CAAA;AAAA,UAE1G,UAAA,GACA,UAAA,GACG,aAAA,mBACHA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,GAAA,EAAK,aAAA;AAAA,cACL,GAAA,EAAI,MAAA;AAAA,cACJ,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAA,CAAU,UAAU,CAAC;AAAA;AAAA,WACtD,GACG,yBACHA,cAAAA,CAACgB,eAAA,EAAE,SAAA,EAAW,GAAG,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG,CAAA,mBAEzChB,cAAAA,CAACsC,yBAAA,EAAA,EAAc,WAAW,EAAA,CAAG,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG;AAAA;AAAA;AAAA,KAEvD;AAAA,IAGC,0BACAxC,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACV,6EAAA;AAAA,UACA,yBAAA;AAAA,UACA,oBAAA;AAAA,UACA,gBAAgB,cAAc;AAAA,SAC/B;AAAA,QACA,KAAA,EAAO;AAAA,UACN,OAAO,OAAO,WAAA,KAAgB,QAAA,GAAW,CAAA,EAAG,WAAW,CAAA,EAAA,CAAA,GAAO,WAAA;AAAA,UAC9D,QAAQ,OAAO,YAAA,KAAiB,QAAA,GAAW,CAAA,EAAG,YAAY,CAAA,EAAA,CAAA,GAAO,YAAA;AAAA,UACjE,QAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACZ;AAAA,QAGA,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACV,sDAAA;AAAA,gBACA,CAAC,WAAA,IAAe;AAAA,eACjB;AAAA,cACA,OAAO,WAAA,GAAc,EAAE,YAAY,WAAA,EAAa,KAAA,EAAO,QAAO,GAAI,MAAA;AAAA,cAElE,QAAA,EAAA;AAAA,gCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACd,QAAA,EAAA;AAAA,kCAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACb,QAAA,EAAA,YAAA,EACF,CAAA;AAAA,kCACAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACd,QAAA,EAAA;AAAA,oCAAAE,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8CAAA,EACZ,QAAA,EAAA,WAAA,EACF,CAAA;AAAA,oCACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iDACX,QAAA,EAAA,cAAA,EACF;AAAA,mBAAA,EACD;AAAA,iBAAA,EACD,CAAA;AAAA,gCACAA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACA,OAAA,EAAS,UAAA;AAAA,oBACT,SAAA,EAAU,kGAAA;AAAA,oBACV,YAAA,EAAW,eAAA;AAAA,oBAEX,QAAA,kBAAAA,cAAAA,CAACuC,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAClC;AAAA;AAAA,WACD;AAAA,0BAGAvC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACd,QAAA,kBAAAA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACA,MAAA;AAAA,cACA,SAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA,WACX,EACD;AAAA;AAAA;AAAA;AACD,GAAA,EAEF,CAAA;AAEF;AChIO,IAAM,iBAAA,GAAoBwC,oBAAkD,MAAS;AAWrF,SAAS,aAAA,GAAwC;AACvD,EAAA,MAAM,GAAA,GAAMC,iBAAW,iBAAiB,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACT,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,GAAA;AACR;;;ACpCO,SAAS,kBAAA,CAAmB,GAAA,EAAa,GAAA,mBAAY,IAAI,MAAK,EAAW;AAC/E,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,EAAA;AAEzC,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,EAAQ,GAAI,KAAK,OAAA,EAAQ;AAC5C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAI,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAM,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,IAAS,CAAA;AAE9C,EAAA,IAAI,OAAA,GAAU,IAAI,OAAO,UAAA;AACzB,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,EAAA,IAAI,QAAA,GAAW,EAAA,EAAI,OAAO,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAA;AAErC,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY,EAAG,IAAA,CAAK,QAAA,EAAS,EAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAC7E,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,GAAA,CAAI,WAAA,EAAY,EAAG,GAAA,CAAI,QAAA,EAAS,EAAG,GAAA,CAAI,OAAA,EAAS,CAAA;AACvE,EAAA,MAAM,UAAU,IAAA,CAAK,KAAA;AAAA,IAAA,CACnB,KAAA,CAAM,OAAA,EAAQ,GAAI,QAAA,CAAS,SAAQ,IAAK;AAAA,GAC1C;AAEA,EAAA,IAAI,OAAA,KAAY,GAAG,OAAO,WAAA;AAC1B,EAAA,IAAI,UAAU,CAAA,EAAG;AAChB,IAAA,OAAO,KAAK,kBAAA,CAAmB,MAAA,EAAW,EAAE,OAAA,EAAS,SAAS,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,EAAY,KAAM,IAAI,WAAA,EAAY;AACxD,EAAA,OAAO,IAAA,CAAK,mBAAmB,MAAA,EAAW;AAAA,IACzC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,WAAW,MAAA,GAAY;AAAA,GAC7B,CAAA;AACF","file":"index.native.js","sourcesContent":["import { forwardRef } from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\nimport type { PaymanChatProps, PaymanChatRef } from \"../../types\";\n\n/**\n * PaymanChat v2 on React Native is not yet implemented.\n *\n * The v2 UI currently ships web-only. A parallel React Native renderer is\n * planned — until then, this file renders a visible placeholder so consumers\n * don't silently crash on Metro / Hermes. Downstream apps that need chat on\n * native should pin `@paymanai/payman-ask-sdk@^1` until the RN rewrite lands.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(function PaymanChat(\n\t_props,\n\t_ref,\n) {\n\treturn (\n\t\t<View style={styles.root}>\n\t\t\t<Text style={styles.title}>PaymanChat v2</Text>\n\t\t\t<Text style={styles.body}>\n\t\t\t\tReact Native support is coming in a follow-up release. Please use the web SDK for now.\n\t\t\t</Text>\n\t\t</View>\n\t);\n});\n\nconst styles = StyleSheet.create({\n\troot: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 24,\n\t},\n\ttitle: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t\tmarginBottom: 8,\n\t},\n\tbody: {\n\t\tfontSize: 13,\n\t\tcolor: \"#666\",\n\t\ttextAlign: \"center\",\n\t},\n});\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\tlistSessions,\n\ttype BaseChatConfig,\n\ttype SessionSummary,\n} from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { SessionHistoryOptions } from \"../types\";\nimport type { OptimisticSessionActivity } from \"../components/SessionHistorySidebar\";\n\nconst DEFAULT_WIDTH = 280;\nconst DEFAULT_MIN_WIDTH = 240;\nconst DEFAULT_MAX_WIDTH = 480;\nconst DEFAULT_PAGE_SIZE = 20;\n\ntype PersistedState = {\n\twidth: number;\n\tcollapsed: boolean;\n};\n\ntype UseSessionHistoryReturn = {\n\tsessions: SessionSummary[];\n\tisLoading: boolean;\n\terror: Error | null;\n\thasNext: boolean;\n\tloadMore: () => Promise<void>;\n\trefresh: () => Promise<void>;\n\n\twidth: number;\n\tsetWidth: (px: number) => void;\n\tcollapsed: boolean;\n\tsetCollapsed: (value: boolean | ((prev: boolean) => boolean)) => void;\n\n\tminWidth: number;\n\tmaxWidth: number;\n\n\tisReady: boolean; // true when workflow.name + session.owner.id are both present\n};\n\nfunction getPersistKey(config: BaseChatConfig, opts: SessionHistoryOptions): string {\n\tif (opts.persistKey) return opts.persistKey;\n\treturn `payman-chat-sidebar:${config.workflow.id ?? \"unknown\"}`;\n}\n\nfunction loadPersistedState(key: string): PersistedState | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\tconst raw = window.localStorage.getItem(key);\n\t\tif (!raw) return null;\n\t\tconst parsed = JSON.parse(raw) as Partial<PersistedState>;\n\t\tif (typeof parsed.width !== \"number\" || typeof parsed.collapsed !== \"boolean\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn { width: parsed.width, collapsed: parsed.collapsed };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction savePersistedState(key: string, state: PersistedState): void {\n\tif (typeof window === \"undefined\") return;\n\ttry {\n\t\twindow.localStorage.setItem(key, JSON.stringify(state));\n\t} catch {\n\t\t// ignore quota / privacy-mode errors\n\t}\n}\n\nexport function useSessionHistory(\n\tconfig: BaseChatConfig,\n\toptions: SessionHistoryOptions = {},\n\toptimisticActivity?: OptimisticSessionActivity | null,\n): UseSessionHistoryReturn {\n\tconst defaultWidth = options.defaultWidth ?? DEFAULT_WIDTH;\n\tconst minWidth = options.minWidth ?? DEFAULT_MIN_WIDTH;\n\tconst maxWidth = options.maxWidth ?? DEFAULT_MAX_WIDTH;\n\tconst pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;\n\n\tconst persistKey = useMemo(\n\t\t() => getPersistKey(config, options),\n\t\t[config.workflow.id, options.persistKey],\n\t);\n\n\tconst [width, setWidthState] = useState<number>(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\treturn persisted?.width ?? defaultWidth;\n\t});\n\tconst [collapsed, setCollapsedState] = useState<boolean>(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\treturn persisted?.collapsed ?? options.defaultCollapsed ?? false;\n\t});\n\n\t// Rehydrate when persistKey (workflow.id) changes\n\tuseEffect(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\tsetWidthState(persisted?.width ?? defaultWidth);\n\t\tsetCollapsedState(persisted?.collapsed ?? options.defaultCollapsed ?? false);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [persistKey]);\n\n\tconst setWidth = useCallback(\n\t\t(px: number) => {\n\t\t\tconst clamped = Math.max(minWidth, Math.min(maxWidth, Math.round(px)));\n\t\t\tsetWidthState(clamped);\n\t\t\tsavePersistedState(persistKey, { width: clamped, collapsed });\n\t\t},\n\t\t[collapsed, maxWidth, minWidth, persistKey],\n\t);\n\n\tconst setCollapsed = useCallback(\n\t\t(value: boolean | ((prev: boolean) => boolean)) => {\n\t\t\tsetCollapsedState((prev) => {\n\t\t\t\tconst next = typeof value === \"function\" ? value(prev) : value;\n\t\t\t\tsavePersistedState(persistKey, { width, collapsed: next });\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[persistKey, width],\n\t);\n\n\tconst isReady = !!(\n\t\tconfig.session?.owner?.id &&\n\t\t(config.workflow.id || config.workflow.name)\n\t);\n\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [page, setPage] = useState(0);\n\tconst [hasNext, setHasNext] = useState(false);\n\n\tconst inFlightRef = useRef<AbortController | null>(null);\n\tconst configRef = useRef(config);\n\tconfigRef.current = config;\n\n\tconst fetchPage = useCallback(\n\t\tasync (pageIndex: number, replace: boolean) => {\n\t\t\tif (!isReady) return;\n\t\t\tinFlightRef.current?.abort();\n\t\t\tconst ac = new AbortController();\n\t\t\tinFlightRef.current = ac;\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst resp = await listSessions(configRef.current, {\n\t\t\t\t\tpage: pageIndex,\n\t\t\t\t\tsize: pageSize,\n\t\t\t\t\tsignal: ac.signal,\n\t\t\t\t});\n\t\t\t\tsetSessions((prev) => (replace ? resp.data : [...prev, ...resp.data]));\n\t\t\t\tsetPage(pageIndex);\n\t\t\t\tsetHasNext(resp.pageInfo.hasNext);\n\t\t\t} catch (err) {\n\t\t\t\tif ((err as Error).name !== \"AbortError\") {\n\t\t\t\t\tsetError(err as Error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (inFlightRef.current === ac) {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[isReady, pageSize],\n\t);\n\n\tconst refresh = useCallback(() => fetchPage(0, true), [fetchPage]);\n\tconst loadMore = useCallback(async () => {\n\t\tif (!hasNext || isLoading) return;\n\t\tawait fetchPage(page + 1, false);\n\t}, [fetchPage, hasNext, isLoading, page]);\n\n\tuseEffect(() => {\n\t\tif (!optimisticActivity) return;\n\n\t\tsetSessions((prev) => {\n\t\t\tconst next = [...prev];\n\t\t\tlet existingIndex = next.findIndex(\n\t\t\t\t(session) => session.sessionId === optimisticActivity.sessionId,\n\t\t\t);\n\n\t\t\tif (existingIndex === -1 && optimisticActivity.previousSessionId) {\n\t\t\t\texistingIndex = next.findIndex(\n\t\t\t\t\t(session) =>\n\t\t\t\t\t\tsession.sessionId === optimisticActivity.previousSessionId,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst existing =\n\t\t\t\texistingIndex >= 0 ? next.splice(existingIndex, 1)[0] : undefined;\n\t\t\tconst preferredTitle =\n\t\t\t\texisting?.sessionTitle &&\n\t\t\t\texisting.sessionTitle.trim() &&\n\t\t\t\texisting.sessionTitle !== \"Untitled session\"\n\t\t\t\t\t? existing.sessionTitle\n\t\t\t\t\t: optimisticActivity.sessionTitle?.trim() ||\n\t\t\t\t\t\texisting?.sessionTitle ||\n\t\t\t\t\t\t\"Untitled session\";\n\n\t\t\tconst localSession: SessionSummary = existing ?? {\n\t\t\t\tuserId: config.session?.owner?.id ?? \"\",\n\t\t\t\tuserLabel:\n\t\t\t\t\tconfig.session?.owner?.name ??\n\t\t\t\t\tconfig.session?.owner?.id ??\n\t\t\t\t\t\"\",\n\t\t\t\tsessionId: optimisticActivity.sessionId,\n\t\t\t\tworkflowId: config.workflow.id ?? \"\",\n\t\t\t\tworkflowName: config.workflow.name,\n\t\t\t\tworkflowVersion: config.workflow.version ?? 0,\n\t\t\t\tlastMessageAt: optimisticActivity.lastMessageAt,\n\t\t\t\tmessageCount: 0,\n\t\t\t\tsessionTitle: preferredTitle,\n\t\t\t};\n\n\t\t\tnext.unshift({\n\t\t\t\t...localSession,\n\t\t\t\tsessionId: optimisticActivity.sessionId,\n\t\t\t\tlastMessageAt: optimisticActivity.lastMessageAt,\n\t\t\t\tsessionTitle: preferredTitle,\n\t\t\t});\n\n\t\t\treturn next;\n\t\t});\n\t}, [\n\t\tconfig.session?.owner?.id,\n\t\tconfig.session?.owner?.name,\n\t\tconfig.workflow.id,\n\t\tconfig.workflow.name,\n\t\tconfig.workflow.version,\n\t\toptimisticActivity,\n\t]);\n\n\t// Auto-load first page when the scope becomes ready or key config changes\n\tuseEffect(() => {\n\t\tif (!isReady) return;\n\t\tvoid fetchPage(0, true);\n\t\treturn () => {\n\t\t\tinFlightRef.current?.abort();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\tisReady,\n\t\tconfig.workflow.id,\n\t\tconfig.workflow.stage,\n\t\tconfig.session?.owner?.id,\n\t]);\n\n\treturn {\n\t\tsessions,\n\t\tisLoading,\n\t\terror,\n\t\thasNext,\n\t\tloadMore,\n\t\trefresh,\n\t\twidth,\n\t\tsetWidth,\n\t\tcollapsed,\n\t\tsetCollapsed,\n\t\tminWidth,\n\t\tmaxWidth,\n\t\tisReady,\n\t};\n}\n","import {\n\tAlertCircle,\n\tCheck,\n\tMessageSquare,\n\tPanelBottomOpen,\n\tPanelLeftClose,\n\tPanelLeftOpen,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { motion } from \"framer-motion\";\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type {\n\tBaseChatConfig,\n\tSessionSummary,\n} from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { SessionHistoryOptions } from \"../../types\";\nimport { cn } from \"../../utils/cn\";\nimport { useSessionHistory } from \"../../hooks/useSessionHistory\";\n\nconst MOBILE_BREAKPOINT = 640;\ntype PortalThemeStyle = Record<string, string>;\n\nexport type OptimisticSessionActivity = {\n\tkey: string;\n\tsessionId: string;\n\tpreviousSessionId?: string;\n\tlastMessageAt: string;\n\tsessionTitle?: string;\n};\n\nfunction useIsMobile(): boolean {\n\tconst [isMobile, setIsMobile] = useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth < MOBILE_BREAKPOINT;\n\t});\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n\t\tconst handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n\t\tsetIsMobile(mql.matches);\n\t\tmql.addEventListener(\"change\", handler);\n\t\treturn () => mql.removeEventListener(\"change\", handler);\n\t}, []);\n\treturn isMobile;\n}\n\nfunction readPortalThemeStyle(source: HTMLElement | null): PortalThemeStyle {\n\tif (typeof window === \"undefined\" || !source) return {};\n\tconst root = source.closest(\".payman-v2-root\");\n\tif (!(root instanceof HTMLElement)) return {};\n\n\tconst computed = window.getComputedStyle(root);\n\tconst style: PortalThemeStyle = {\n\t\tcolor: computed.color,\n\t\tfontFamily: computed.fontFamily,\n\t\tfontSize: computed.fontSize,\n\t\tlineHeight: computed.lineHeight,\n\t};\n\n\tfor (let index = 0; index < computed.length; index += 1) {\n\t\tconst name = computed.item(index);\n\t\tif (!name.startsWith(\"--payman-v2-\")) continue;\n\t\tconst value = computed.getPropertyValue(name).trim();\n\t\tif (value) style[name] = value;\n\t}\n\n\treturn style;\n}\n\nexport type SessionHistorySidebarProps = {\n\tconfig: BaseChatConfig;\n\toptions: SessionHistoryOptions;\n\tactiveSessionId?: string;\n\t/** Session id whose conversation history is currently being fetched.\n\t * The matching row renders a small inline spinner next to its title. */\n\tloadingSessionId?: string;\n\t/**\n\t * Session ids that currently have an in-flight workflow stream. Each\n\t * matching row renders a subtle running mark on the right of its title.\n\t */\n\tstreamingSessionIds?: ReadonlySet<string>;\n\t/**\n\t * Session ids whose stream completed recently. Each matching row briefly\n\t * renders a check mark on the right of its title — the parent is\n\t * expected to drop the id from the set after a few seconds so the mark\n\t * goes away on its own.\n\t */\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\toptimisticActivity?: OptimisticSessionActivity | null;\n\t/** Called when the user clicks a row. */\n\tonSelectSession: (session: SessionSummary) => void;\n\t/** Controlled mobile drawer open state. */\n\tmobileOpen: boolean;\n\tonMobileOpenChange: (open: boolean) => void;\n};\n\nexport function SessionHistorySidebar({\n\tconfig,\n\toptions,\n\tactiveSessionId,\n\tloadingSessionId,\n\tstreamingSessionIds,\n\trecentlyCompletedSessionIds,\n\toptimisticActivity,\n\tonSelectSession,\n\tmobileOpen,\n\tonMobileOpenChange,\n}: SessionHistorySidebarProps) {\n\tconst isMobile = useIsMobile();\n\tconst mobileThemeSourceRef = useRef<HTMLDivElement>(null);\n\tconst [mobilePortalThemeStyle, setMobilePortalThemeStyle] =\n\t\tuseState<PortalThemeStyle>({});\n\tconst history = useSessionHistory(config, options, optimisticActivity);\n\n\tuseEffect(() => {\n\t\tif (!isMobile) return;\n\t\tsetMobilePortalThemeStyle(readPortalThemeStyle(mobileThemeSourceRef.current));\n\t}, [isMobile, mobileOpen]);\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<div ref={mobileThemeSourceRef} style={{ display: \"contents\" }}>\n\t\t\t\t{!mobileOpen && (\n\t\t\t\t\t<div className=\"payman-sidebar-mobile-trigger\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label=\"Open recent sessions\"\n\t\t\t\t\t\t\ttitle=\"Recent sessions\"\n\t\t\t\t\t\t\tonClick={() => onMobileOpenChange(true)}\n\t\t\t\t\t\t\tclassName=\"payman-sidebar-collapsed-button payman-sidebar-mobile-trigger-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PanelBottomOpen size={17} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<MobileDrawer\n\t\t\t\t\topen={mobileOpen}\n\t\t\t\t\tonOpenChange={onMobileOpenChange}\n\t\t\t\t\tthemeStyle={mobilePortalThemeStyle}\n\t\t\t\t\thistory={history}\n\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\tonSelectSession={(s) => {\n\t\t\t\t\t\tonSelectSession(s);\n\t\t\t\t\t\tonMobileOpenChange(false);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DesktopSidebar\n\t\t\thistory={history}\n\t\t\tactiveSessionId={activeSessionId}\n\t\t\tloadingSessionId={loadingSessionId}\n\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\tonSelectSession={onSelectSession}\n\t\t/>\n\t);\n}\n\n// ============================================\n// Desktop sidebar (resizable + collapsible)\n// ============================================\n\ntype DesktopProps = {\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\tstreamingSessionIds?: ReadonlySet<string>;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tonSelectSession: (session: SessionSummary) => void;\n};\n\nfunction DesktopSidebar({\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\tstreamingSessionIds,\n\trecentlyCompletedSessionIds,\n\tonSelectSession,\n}: DesktopProps) {\n\tconst { width, setWidth, collapsed, setCollapsed, minWidth, maxWidth } = history;\n\n\tconst dragStateRef = useRef<{ startX: number; startWidth: number } | null>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst [handleHover, setHandleHover] = useState(false);\n\n\tconst onResizeStart = useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\tdragStateRef.current = { startX: e.clientX, startWidth: width };\n\t\t\tsetIsDragging(true);\n\t\t},\n\t\t[width],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isDragging) return;\n\t\tconst onMove = (e: PointerEvent) => {\n\t\t\tconst st = dragStateRef.current;\n\t\t\tif (!st) return;\n\t\t\tsetWidth(st.startWidth + (e.clientX - st.startX));\n\t\t};\n\t\tconst onEnd = () => {\n\t\t\tdragStateRef.current = null;\n\t\t\tsetIsDragging(false);\n\t\t};\n\t\twindow.addEventListener(\"pointermove\", onMove);\n\t\twindow.addEventListener(\"pointerup\", onEnd);\n\t\twindow.addEventListener(\"pointercancel\", onEnd);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"pointermove\", onMove);\n\t\t\twindow.removeEventListener(\"pointerup\", onEnd);\n\t\t\twindow.removeEventListener(\"pointercancel\", onEnd);\n\t\t};\n\t}, [isDragging, setWidth]);\n\n\tif (collapsed) {\n\t\treturn (\n\t\t\t<CollapsedButton\n\t\t\t\tonExpand={() => setCollapsed(false)}\n\t\t\t\thistory={history}\n\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst handleActive = handleHover || isDragging;\n\n\treturn (\n\t\t<aside\n\t\t\tclassName=\"payman-sidebar payman-sidebar-desktop\"\n\t\t\tstyle={{\n\t\t\t\twidth,\n\t\t\t\tminWidth,\n\t\t\t\tmaxWidth,\n\t\t\t\theight: \"100%\",\n\t\t\t\tminHeight: 0,\n\t\t\t\talignSelf: \"stretch\",\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\toverflow: \"hidden\",\n\t\t\t\ttransition: isDragging ? \"none\" : \"width 140ms ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<SidebarHeader onCollapse={() => setCollapsed(true)} />\n\t\t\t<SessionList\n\t\t\t\thistory={history}\n\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\trole=\"separator\"\n\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\tonPointerDown={onResizeStart}\n\t\t\t\tonMouseEnter={() => setHandleHover(true)}\n\t\t\t\tonMouseLeave={() => setHandleHover(false)}\n\t\t\t\tclassName=\"payman-sidebar-resize\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tright: -4,\n\t\t\t\t\twidth: 8,\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tcursor: \"col-resize\",\n\t\t\t\t\tuserSelect: \"none\",\n\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\tzIndex: 2,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\taria-hidden\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 3,\n\t\t\t\t\t\theight: 36,\n\t\t\t\t\t\tborderRadius: 999,\n\t\t\t\t\t\tbackground: handleActive\n\t\t\t\t\t\t\t? \"var(--payman-v2-text-3)\"\n\t\t\t\t\t\t\t: \"transparent\",\n\t\t\t\t\t\topacity: handleActive ? 1 : 0,\n\t\t\t\t\t\ttransition: \"opacity 140ms ease, background 140ms ease\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</aside>\n\t);\n}\n\n// ============================================\n// Collapsed button (single expand button + hover popover)\n// ============================================\n\nconst POPOVER_LEAVE_DELAY_MS = 200;\n\nfunction CollapsedButton({\n\tonExpand,\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\tstreamingSessionIds,\n\trecentlyCompletedSessionIds,\n\tonSelectSession,\n}: {\n\tonExpand: () => void;\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\tstreamingSessionIds?: ReadonlySet<string>;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tonSelectSession: (session: SessionSummary) => void;\n}) {\n\tconst [hoverOpen, setHoverOpen] = useState(false);\n\tconst leaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst openPopover = () => {\n\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\tsetHoverOpen(true);\n\t};\n\tconst schedulePopoverClose = () => {\n\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\tleaveTimerRef.current = setTimeout(\n\t\t\t() => setHoverOpen(false),\n\t\t\tPOPOVER_LEAVE_DELAY_MS,\n\t\t);\n\t};\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\t},\n\t\t[],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"payman-sidebar-collapsed\"\n\t\t\tonMouseEnter={openPopover}\n\t\t\tonMouseLeave={schedulePopoverClose}\n\t\t\tstyle={{ position: \"relative\", alignSelf: \"flex-start\" }}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label=\"Expand sidebar\"\n\t\t\t\ttitle=\"Expand sidebar\"\n\t\t\t\tonClick={onExpand}\n\t\t\t\tclassName=\"payman-sidebar-collapsed-button\"\n\t\t\t>\n\t\t\t\t<PanelLeftOpen size={16} />\n\t\t\t</button>\n\n\t\t\t{hoverOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"payman-sidebar-popover\"\n\t\t\t\t\tonMouseEnter={openPopover}\n\t\t\t\t\tonMouseLeave={schedulePopoverClose}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: \"calc(100% + 6px)\",\n\t\t\t\t\t\ttop: 6,\n\t\t\t\t\t\twidth: Math.min(history.width, 320),\n\t\t\t\t\t\tmaxHeight: 480,\n\t\t\t\t\t\tzIndex: 50,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<SidebarHeader />\n\t\t\t\t\t<SessionList\n\t\t\t\t\t\thistory={history}\n\t\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\t\tonSelectSession={(s) => {\n\t\t\t\t\t\t\tonSelectSession(s);\n\t\t\t\t\t\t\tsetHoverOpen(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n// ============================================\n// Mobile drawer\n// ============================================\n\ntype MobileProps = {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tthemeStyle: PortalThemeStyle;\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\tstreamingSessionIds?: ReadonlySet<string>;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tonSelectSession: (session: SessionSummary) => void;\n};\n\nfunction MobileDrawer({\n\topen,\n\tonOpenChange,\n\tthemeStyle,\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\tstreamingSessionIds,\n\trecentlyCompletedSessionIds,\n\tonSelectSession,\n}: MobileProps) {\n\tif (!open || typeof document === \"undefined\") return null;\n\treturn createPortal(\n\t\t<motion.div\n\t\t\tclassName=\"payman-sidebar-backdrop\"\n\t\t\tonClick={() => onOpenChange(false)}\n\t\t\tstyle={themeStyle as CSSProperties}\n\t\t\tinitial={{ opacity: 0 }}\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\ttransition={{ duration: 0.18, ease: \"easeOut\" }}\n\t\t>\n\t\t\t<motion.aside\n\t\t\t\tclassName=\"payman-sidebar payman-sidebar-sheet\"\n\t\t\t\tdata-open=\"true\"\n\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label=\"Recent sessions\"\n\t\t\t\tinitial={{ y: 28, opacity: 0.96 }}\n\t\t\t\tanimate={{ y: 0, opacity: 1 }}\n\t\t\t\ttransition={{\n\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\tstiffness: 380,\n\t\t\t\t\tdamping: 32,\n\t\t\t\t\tmass: 0.92,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"payman-sidebar-sheet-grabber\" aria-hidden />\n\t\t\t\t<SidebarHeader onCollapse={() => onOpenChange(false)} mobile />\n\t\t\t\t<SessionList\n\t\t\t\t\thistory={history}\n\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t\t/>\n\t\t\t</motion.aside>\n\t\t</motion.div>,\n\t\tdocument.body,\n\t);\n}\n\n// ============================================\n// Shared pieces\n// ============================================\n\ntype SessionDateGroup = {\n\tkey: string;\n\tlabel: string;\n\tsessions: SessionSummary[];\n};\n\nfunction SidebarHeader({\n\tonCollapse,\n\tmobile = false,\n}: {\n\tonCollapse?: () => void;\n\tmobile?: boolean;\n}) {\n\treturn (\n\t\t<div className=\"payman-sidebar-header\">\n\t\t\t<span>Recent sessions</span>\n\t\t\t{onCollapse && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={mobile ? \"Close recent sessions\" : \"Collapse sidebar\"}\n\t\t\t\t\ttitle={mobile ? \"Close recent sessions\" : \"Collapse sidebar\"}\n\t\t\t\t\tonClick={onCollapse}\n\t\t\t\t>\n\t\t\t\t\t{mobile ? <X size={16} /> : <PanelLeftClose size={14} />}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction SessionList({\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\tstreamingSessionIds,\n\trecentlyCompletedSessionIds,\n\tonSelectSession,\n}: {\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\tstreamingSessionIds?: ReadonlySet<string>;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tonSelectSession: (session: SessionSummary) => void;\n}) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst { sessions, hasNext, isLoading, error, loadMore, isReady, refresh } =\n\t\thistory;\n\n\tconst formattedNow = useMemo(() => new Date(), []);\n\tconst sessionGroups = useMemo(\n\t\t() => groupSessionsByDate(sessions, formattedNow),\n\t\t[sessions, formattedNow],\n\t);\n\n\tif (!isReady) {\n\t\treturn (\n\t\t\t<div className=\"payman-sidebar-notice-shell\">\n\t\t\t\t<div className=\"payman-sidebar-notice\">\n\t\t\t\t\tConfigure the chat settings.\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={listRef}\n\t\t\tclassName=\"payman-sidebar-list\"\n\t\t\tstyle={{ flex: \"1 1 0%\", minHeight: 0, overflowY: \"auto\" }}\n\t\t>\n\t\t\t{error && sessions.length === 0 && (\n\t\t\t\t<ErrorState onRetry={() => void refresh()} />\n\t\t\t)}\n\t\t\t{!error && sessions.length === 0 && isLoading && (\n\t\t\t\t<div className=\"payman-sidebar-loading\">\n\t\t\t\t\t<Spinner size={18} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!error && sessions.length === 0 && !isLoading && <EmptyState />}\n\t\t\t{sessionGroups.map((group) => (\n\t\t\t\t<section\n\t\t\t\t\tkey={group.key}\n\t\t\t\t\tclassName=\"payman-sidebar-group\"\n\t\t\t\t\taria-label={group.label}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-sidebar-group-label\">{group.label}</div>\n\t\t\t\t\t<div className=\"payman-sidebar-group-items\">\n\t\t\t\t\t\t{group.sessions.map((s) => (\n\t\t\t\t\t\t\t<SessionRow\n\t\t\t\t\t\t\t\tkey={s.sessionId}\n\t\t\t\t\t\t\t\tsession={s}\n\t\t\t\t\t\t\t\tisActive={s.sessionId === activeSessionId}\n\t\t\t\t\t\t\t\tisLoading={s.sessionId === loadingSessionId}\n\t\t\t\t\t\t\t\tisStreaming={streamingSessionIds?.has(s.sessionId) ?? false}\n\t\t\t\t\t\t\t\tisRecentlyCompleted={\n\t\t\t\t\t\t\t\t\trecentlyCompletedSessionIds?.has(s.sessionId) ?? false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonSelect={onSelectSession}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t))}\n\t\t\t{sessions.length > 0 && hasNext && (\n\t\t\t\t<LoadMoreButton\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tonClick={() => void loadMore()}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{sessions.length > 0 && error && (\n\t\t\t\t<LoadMoreButton\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\tlabel=\"Retry\"\n\t\t\t\t\tonClick={() => void refresh()}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction SessionRow({\n\tsession,\n\tisActive,\n\tisLoading,\n\tisStreaming,\n\tisRecentlyCompleted,\n\tonSelect,\n}: {\n\tsession: SessionSummary;\n\tisActive: boolean;\n\tisLoading: boolean;\n\tisStreaming: boolean;\n\tisRecentlyCompleted: boolean;\n\tonSelect: (s: SessionSummary) => void;\n}) {\n\t// Status precedence: a running stream wins over a \"just completed\" mark,\n\t// and the conversations-loading spinner only shows when nothing more\n\t// interesting is happening for this row.\n\tlet statusNode: React.ReactNode = null;\n\tlet statusLabel: string | undefined;\n\tif (isStreaming) {\n\t\tstatusNode = (\n\t\t\t<span\n\t\t\t\tclassName=\"payman-sidebar-row-status payman-sidebar-row-status-live\"\n\t\t\t\taria-hidden\n\t\t\t>\n\t\t\t\t<span className=\"payman-sidebar-row-live-dot\" />\n\t\t\t\t<span className=\"payman-sidebar-row-live-track\" />\n\t\t\t</span>\n\t\t);\n\t\tstatusLabel = \"Running\";\n\t} else if (isRecentlyCompleted) {\n\t\tstatusNode = (\n\t\t\t<span\n\t\t\t\tclassName=\"payman-sidebar-row-status payman-sidebar-row-status-done\"\n\t\t\t\taria-hidden\n\t\t\t>\n\t\t\t\t<Check size={11} strokeWidth={2.5} />\n\t\t\t</span>\n\t\t);\n\t\tstatusLabel = \"Just finished\";\n\t} else if (isLoading) {\n\t\tstatusNode = (\n\t\t\t<span aria-hidden className=\"payman-sidebar-row-spinner\" />\n\t\t);\n\t\tstatusLabel = \"Loading\";\n\t}\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={() => onSelect(session)}\n\t\t\tclassName={cn(\"payman-sidebar-row\", isActive && \"is-active\")}\n\t\t\ttitle={\n\t\t\t\tstatusLabel\n\t\t\t\t\t? `${session.sessionTitle || \"Untitled session\"} — ${statusLabel}`\n\t\t\t\t\t: session.sessionTitle\n\t\t\t}\n\t\t\taria-busy={isLoading || isStreaming || undefined}\n\t\t>\n\t\t\t<span className=\"payman-sidebar-row-main\">\n\t\t\t\t<span className=\"payman-sidebar-row-title\">\n\t\t\t\t\t{session.sessionTitle || \"Untitled session\"}\n\t\t\t\t</span>\n\t\t\t\t{statusNode}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n\nfunction EmptyState() {\n\treturn (\n\t\t<div className=\"payman-sidebar-empty\">\n\t\t\t<div className=\"payman-sidebar-empty-icon\" aria-hidden>\n\t\t\t\t<MessageSquare size={18} />\n\t\t\t</div>\n\t\t\t<div className=\"payman-sidebar-empty-title\">No sessions yet</div>\n\t\t\t<div className=\"payman-sidebar-empty-desc\">\n\t\t\t\tYour conversations will appear here once you start chatting.\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction ErrorState({ onRetry }: { onRetry: () => void }) {\n\treturn (\n\t\t<div className=\"payman-sidebar-error\">\n\t\t\t<div className=\"payman-sidebar-error-icon\" aria-hidden>\n\t\t\t\t<AlertCircle size={18} />\n\t\t\t</div>\n\t\t\t<div className=\"payman-sidebar-error-title\">Couldn't load sessions</div>\n\t\t\t<div className=\"payman-sidebar-error-desc\">\n\t\t\t\tCheck your connection and try again.\n\t\t\t</div>\n\t\t\t<LoadMoreButton\n\t\t\t\tisLoading={false}\n\t\t\t\tlabel=\"Try again\"\n\t\t\t\ticon={<RotateCcw size={12} />}\n\t\t\t\tonClick={onRetry}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction LoadMoreButton({\n\tisLoading,\n\tonClick,\n\tlabel,\n\ticon,\n}: {\n\tisLoading: boolean;\n\tonClick: () => void;\n\tlabel?: string;\n\ticon?: React.ReactNode;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName=\"payman-sidebar-load-more\"\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<Spinner />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{icon}\n\t\t\t\t\t<span>{label ?? \"Load more sessions\"}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</button>\n\t);\n}\n\nfunction Spinner({ size = 12 }: { size?: number }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden\n\t\t\tclassName=\"payman-sidebar-spinner\"\n\t\t\tstyle={{\n\t\t\t\twidth: size,\n\t\t\t\theight: size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tborder: `${Math.max(1.5, size / 8)}px solid var(--payman-v2-border-1)`,\n\t\t\t\tborderTopColor: \"var(--payman-v2-text-2)\",\n\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\tanimation: \"payman-v2-spin 0.7s linear infinite\",\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction groupSessionsByDate(\n\tsessions: SessionSummary[],\n\tnow: Date,\n): SessionDateGroup[] {\n\tconst groups = new Map<string, SessionDateGroup>();\n\tconst orderedGroups: SessionDateGroup[] = [];\n\n\tfor (const session of sessions) {\n\t\tconst bucket = getSessionDateBucket(session.lastMessageAt, now);\n\t\tconst existing = groups.get(bucket.key);\n\n\t\tif (existing) {\n\t\t\texisting.sessions.push(session);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst group: SessionDateGroup = {\n\t\t\tkey: bucket.key,\n\t\t\tlabel: bucket.label,\n\t\t\tsessions: [session],\n\t\t};\n\n\t\tgroups.set(bucket.key, group);\n\t\torderedGroups.push(group);\n\t}\n\n\treturn orderedGroups;\n}\n\nfunction getSessionDateBucket(\n\tiso: string,\n\tnow: Date,\n): Pick<SessionDateGroup, \"key\" | \"label\"> {\n\tconst date = new Date(iso);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn { key: \"older\", label: \"Older\" };\n\t}\n\n\tconst dayKey = [\n\t\tdate.getFullYear(),\n\t\tString(date.getMonth() + 1).padStart(2, \"0\"),\n\t\tString(date.getDate()).padStart(2, \"0\"),\n\t].join(\"-\");\n\n\tconst sessionDay = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\tconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\tconst dayDiff = Math.round(\n\t\t(today.getTime() - sessionDay.getTime()) / 86_400_000,\n\t);\n\n\tif (dayDiff <= 0) return { key: dayKey, label: \"Today\" };\n\tif (dayDiff === 1) return { key: dayKey, label: \"Yesterday\" };\n\tif (dayDiff < 7) {\n\t\treturn {\n\t\t\tkey: dayKey,\n\t\t\tlabel: date.toLocaleDateString(undefined, { weekday: \"long\" }),\n\t\t};\n\t}\n\n\tconst sameYear = date.getFullYear() === now.getFullYear();\n\treturn {\n\t\tkey: dayKey,\n\t\tlabel: date.toLocaleDateString(undefined, {\n\t\t\tmonth: \"short\",\n\t\t\tday: \"numeric\",\n\t\t\tyear: sameYear ? undefined : \"numeric\",\n\t\t}),\n\t};\n}\n","import { useState } from \"react\";\nimport { Clipboard, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { ChatHeaderProps } from \"../../types\";\n\nexport function ChatHeader({\n\tsessionId,\n\tonCopySessionId,\n\tonNewSession,\n\tshowResetSession = false,\n\tchildren,\n}: ChatHeaderProps) {\n\tconst [copiedSessionId, setCopiedSessionId] = useState(false);\n\n\tconst handleCopySessionId = () => {\n\t\tif (sessionId && onCopySessionId) {\n\t\t\tClipboard.setString(sessionId);\n\t\t\tsetCopiedSessionId(true);\n\t\t\tsetTimeout(() => setCopiedSessionId(false), 2000);\n\t\t\tonCopySessionId(sessionId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<View style={styles.container}>\n\t\t\t<View style={styles.left}>\n\t\t\t\t<Text style={styles.title}>Chat</Text>\n\t\t\t\t{sessionId && (\n\t\t\t\t\t<Pressable onPress={handleCopySessionId} style={styles.sessionChip}>\n\t\t\t\t\t\t<Text style={styles.sessionText}>\n\t\t\t\t\t\t\t{sessionId.length > 20\n\t\t\t\t\t\t\t\t? `${sessionId.substring(0, 8)}…${sessionId.slice(-8)}`\n\t\t\t\t\t\t\t\t: sessionId}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{copiedSessionId ? (\n\t\t\t\t\t\t\t<Text style={styles.copyHint}>copied</Text>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Text style={styles.copyHint}>copy</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t\t<View style={styles.right}>\n\t\t\t\t{showResetSession && onNewSession && (\n\t\t\t\t\t<Pressable onPress={onNewSession} style={styles.btn}>\n\t\t\t\t\t\t<Text style={styles.btnText}>Reset</Text>\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tpaddingHorizontal: 16,\n\t\theight: 56,\n\t\tborderBottomWidth: 1,\n\t\tborderBottomColor: \"rgba(0,0,0,0.08)\",\n\t\tbackgroundColor: \"rgba(255,255,255,0.85)\",\n\t},\n\tleft: { flex: 1, minWidth: 0 },\n\tright: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n\ttitle: { fontSize: 14, fontWeight: \"600\", color: \"#111\" },\n\tsessionChip: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tmarginTop: 2,\n\t},\n\tsessionText: { fontSize: 10, color: \"#666\", fontFamily: \"Menlo\" },\n\tcopyHint: { fontSize: 9, color: \"#999\" },\n\tbtn: {\n\t\tpaddingHorizontal: 10,\n\t\tpaddingVertical: 6,\n\t\tborderRadius: 8,\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.12)\",\n\t},\n\tbtnText: { fontSize: 12, color: \"#555\" },\n});\n","import { useEffect, useRef, useState } from \"react\";\nimport { TextInput, StyleSheet, Animated } from \"react-native\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst OTP_ERROR_BORDER = \"#ef4444\";\nconst COMPLETE_PULSE_MS = 350;\nconst SHAKE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(TextInput | null)[]>([]);\n\tconst shakeAnim = useRef(new Animated.Value(0)).current;\n\tconst scaleAnim = useRef(new Animated.Value(1)).current;\n\tconst prevLenRef = useRef(0);\n\tconst [internalError, setInternalError] = useState(false);\n\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\tconst digits = value\n\t\t.split(\"\")\n\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t.slice(0, safeMaxLength);\n\n\tconst isFull = value.length === safeMaxLength && /^\\d+$/.test(value);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (!disabled) {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}\n\t}, [disabled]);\n\n\t// Error shake\n\tuseEffect(() => {\n\t\tif (!error) {\n\t\t\tsetInternalError(false);\n\t\t\treturn;\n\t\t}\n\t\tsetInternalError(true);\n\t\tAnimated.sequence([\n\t\t\tAnimated.timing(shakeAnim, { toValue: 1, duration: SHAKE_MS, useNativeDriver: true }),\n\t\t\tAnimated.timing(shakeAnim, { toValue: 0, duration: 0, useNativeDriver: true }),\n\t\t]).start();\n\t}, [error, shakeAnim]);\n\n\t// Completion pulse\n\tuseEffect(() => {\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1.04, duration: COMPLETE_PULSE_MS * 0.4, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1, duration: COMPLETE_PULSE_MS * 0.6, useNativeDriver: true }),\n\t\t\t]).start();\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t}, [isFull, value.length, safeMaxLength, scaleAnim]);\n\n\tconst shakeTranslate = shakeAnim.interpolate({\n\t\tinputRange: [0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1],\n\t\toutputRange: [0, -6, 5, -4, 3, -2, 1, 0],\n\t});\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, text: string) => {\n\t\tconst cleaned = text.replace(/\\D/g, \"\");\n\t\tif (cleaned.length > 1) {\n\t\t\tconst pasted = cleaned.slice(0, safeMaxLength);\n\t\t\tconst newDigits = pasted\n\t\t\t\t.split(\"\")\n\t\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t\t.slice(0, safeMaxLength);\n\t\t\tupdateValue(newDigits);\n\t\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t\t\treturn;\n\t\t}\n\n\t\tconst char = cleaned.slice(-1);\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyPress = (index: number, key: string) => {\n\t\tif (key === \"Backspace\") {\n\t\t\tif (digits[index]) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[\n\t\t\t\ts.container,\n\t\t\t\t{ transform: [{ translateX: shakeTranslate }, { scale: scaleAnim }] },\n\t\t\t]}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<TextInput\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\teditable={!disabled}\n\t\t\t\t\tkeyboardType=\"number-pad\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tonChangeText={(text) => handleChange(i, text)}\n\t\t\t\t\tonKeyPress={({ nativeEvent }) => handleKeyPress(i, nativeEvent.key)}\n\t\t\t\t\tonFocus={() => inputRefs.current[i]?.setNativeProps({ selection: { start: 0, end: 1 } })}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.input,\n\t\t\t\t\t\tdisabled && s.inputDisabled,\n\t\t\t\t\t\tinternalError && s.inputError,\n\t\t\t\t\t]}\n\t\t\t\t\taccessibilityLabel={`Digit ${i + 1}`}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Animated.View>\n\t);\n}\n\nconst PAYMAN_OTP = {\n\tbg: \"#FFFFFF\",\n\tborder: \"rgba(0,0,0,0.1)\",\n\tfg: \"#18181b\",\n\tdisabledBg: \"rgba(0,0,0,0.03)\",\n};\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", gap: 8, justifyContent: \"center\" },\n\tinput: {\n\t\twidth: 44,\n\t\theight: 50,\n\t\ttextAlign: \"center\",\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN_OTP.border,\n\t\tborderRadius: 10,\n\t\tcolor: PAYMAN_OTP.fg,\n\t\tbackgroundColor: PAYMAN_OTP.bg,\n\t},\n\tinputDisabled: { backgroundColor: PAYMAN_OTP.disabledBg, opacity: 0.5 },\n\tinputError: {\n\t\tborderColor: OTP_ERROR_BORDER,\n\t\tborderWidth: 1.5,\n\t},\n});\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n\t/** Link-style actions (new layout) */\n\tRESEND_CODE: \"Resend OTP\",\n\tCANCEL_TRANSFER: \"Cancel Payment\",\n\t/** Short cancel label for payee approval flows */\n\tCANCEL: \"Cancel\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n\tSECURED_BY_PREFIX: \"Secured by\",\n\tSECURED_BY_BRAND: \"Payman\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n\n/**\n * Format backend amount string (e.g. \"2500.00\", \"53.00\") for display as USD.\n */\nexport function formatAmountForDisplay(amount: string): string {\n\tconst normalized = amount.replace(/,/g, \"\").trim();\n\tconst n = Number(normalized);\n\tif (!Number.isFinite(n)) {\n\t\treturn amount.startsWith(\"$\") ? amount : `$${amount}`;\n\t}\n\treturn new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: \"USD\",\n\t}).format(n);\n}\n","import { X } from \"lucide-react-native\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tActivityIndicator,\n\tDimensions,\n\tImage,\n\tKeyboard,\n\tKeyboardAvoidingView,\n\tModal,\n\tPlatform,\n\tPressable,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tMODAL_CONTENT,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n} from \"./constants\";\nimport { formatAmountForDisplay, getOtpSchemaFromRequest } from \"./utils\";\n\n/** Logo / footer brand teal — hero amount & payee use this instead of primary blue */\nconst PAYMAN_BRAND_GREEN = \"#0A3B44\";\n\nconst PAYMAN = {\n\tprimary: \"#00858d\",\n\tprimaryForeground: \"#ffffff\",\n\tforeground: \"#18181b\",\n\tmutedForeground: \"#71717a\",\n\tmutedForegroundLight: \"#a1a1aa\",\n\tborder: \"#e4e4e7\",\n\tcard: \"#ffffff\",\n\tmodalBackdrop: \"rgba(0,0,0,0.4)\",\n} as const;\n\nconst { width: SCREEN_WIDTH } = Dimensions.get(\"window\");\nconst DIALOG_MAX_WIDTH = Math.min(440, SCREEN_WIDTH * 0.94);\nconst DIALOG_PADDING = 28;\nconst OTP_ERROR_FLASH_MS = 600;\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\n\t\t\"approve\" | \"reject\" | \"resend\" | null\n\t>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst [keyboardVisible, setKeyboardVisible] = useState(false);\n\tconst [otpError, setOtpError] = useState(false);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\n\tuseEffect(() => {\n\t\tconst show = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillShow\" : \"keyboardDidShow\",\n\t\t\t() => setKeyboardVisible(true)\n\t\t);\n\t\tconst hide = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillHide\" : \"keyboardDidHide\",\n\t\t\t() => setKeyboardVisible(false)\n\t\t);\n\t\treturn () => {\n\t\t\tshow.remove();\n\t\t\thide.remove();\n\t\t};\n\t}, []);\n\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t\tsetOtpError(false);\n\t\t\tlastAutoSubmittedRef.current = \"\";\n\t\t\tsubmitInFlightRef.current = false;\n\t\t\tsubmitGenerationRef.current += 1;\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\t\tconst timer = setTimeout(\n\t\t\t() => setResendCooldownRemaining((prev) => prev - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — flash red + shake, then clear\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtpError(true);\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tsetOtpError(false);\n\t\t\t\tsetOtp(\"\");\n\t\t\t\tresetActionState();\n\t\t\t}, OTP_ERROR_FLASH_MS);\n\t\t\treturn () => clearTimeout(t);\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\t\tconst timeout = setTimeout(\n\t\t\t() => resetActionState(),\n\t\t\tACTION_PENDING_TIMEOUT_MS\n\t\t);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !userActionRequest) return;\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isSubmitting || submitInFlightRef.current) return;\n\t\tif (lastAutoSubmittedRef.current === otp) return;\n\n\t\tlastAutoSubmittedRef.current = otp;\n\t\tsubmitInFlightRef.current = true;\n\t\tconst submitGeneration = submitGenerationRef.current;\n\n\t\tvoid (async () => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetActionType(\"approve\");\n\t\t\ttry {\n\t\t\t\tawait onApprove(otp);\n\t\t\t} catch {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tresetActionState();\n\t\t\t\tlastAutoSubmittedRef.current = otp;\n\t\t\t} finally {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tsubmitInFlightRef.current = false;\n\t\t\t}\n\t\t})();\n\t}, [\n\t\totp,\n\t\tisOpen,\n\t\tisSubmitting,\n\t\tuserActionRequest,\n\t\tschema.maxLength,\n\t\tonApprove,\n\t\tresetActionState,\n\t]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t} catch {\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!userActionRequest) return null;\n\n\tconst isPayment =\n\t\tuserActionRequest.userActionType === \"PAYMENT_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.amount);\n\tconst isPayee =\n\t\tuserActionRequest.userActionType === \"PAYEE_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.payeeName);\n\n\tconst isVerifying = actionType === \"approve\" && isSubmitting;\n\tconst isCancelling = actionType === \"reject\" && isSubmitting;\n\tconst modalPosition = keyboardVisible ? \"flex-end\" : \"center\";\n\n\treturn (\n\t\t<Modal\n\t\t\tvisible={isOpen}\n\t\t\ttransparent\n\t\t\tanimationType=\"fade\"\n\t\t\tonRequestClose={() => {}}\n\t\t\tstatusBarTranslucent={Platform.OS === \"android\"}\n\t\t>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.keyboardAvoid, { justifyContent: modalPosition }]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 0 : 20}\n\t\t\t>\n\t\t\t\t<View style={[s.modalOverlay, { justifyContent: modalPosition }]}>\n\t\t\t\t\t<ScrollView\n\t\t\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\t\t\ts.scrollContent,\n\t\t\t\t\t\t\t{ justifyContent: modalPosition },\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\t\t\t>\n\t\t\t\t\t<View style={[s.dialog, { width: DIALOG_MAX_WIDTH }]}>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tstyle={s.closeBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Close\"\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t<X\n\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\tpressed && !isSubmitting\n\t\t\t\t\t\t\t\t\t\t\t? PAYMAN.foreground\n\t\t\t\t\t\t\t\t\t\t\t: PAYMAN.mutedForeground\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2.5}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={s.description}\n\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-desc\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t{isPayment ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Pay</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount ? (\n\t\t\t\t\t\t\t<Text style={s.heroAmount}>\n\t\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Create Payee</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName ? (\n\t\t\t\t\t\t\t<View style={s.heroPayeeWrap}>\n\t\t\t\t\t\t\t\t<Text style={s.heroPayeeName}>\n\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t\t<Text style={s.heroPayeeType}>\n\t\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<View style={s.otpWrap} accessibilityLabel=\"payman-otp-wrap\">\n\t\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t\t<View style={s.verifyingRow}>\n\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN_BRAND_GREEN}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Text style={s.verifyingText}>\n\t\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.linksCol}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleResend}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\tpressed && { opacity: 0.6 },\n\t\t\t\t\t\t\t\t\t\t\t(isSubmitting || resendCooldownRemaining > 0) &&\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkDisabled,\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{actionType === \"resend\" ? (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t) : resendCooldownRemaining > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t`${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<View style={{ flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6 }}>\n\t\t\t\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN.mutedForeground}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\t\tpressed &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t!isSubmitting && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: PAYMAN.foreground,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tisSubmitting && !isCancelling && s.linkDisabled,\n\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{isCancelling\n\t\t\t\t\t\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t\t\t\t\t: isPayee\n\t\t\t\t\t\t\t\t\t\t\t\t\t? BUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t\t\t\t\t\t\t: BUTTON_LABELS.CANCEL_TRANSFER}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.footer}>\n\t\t\t\t\t\t\t<Text style={s.footerPrefix}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsource={{ uri: paymanLogoMark }}\n\t\t\t\t\t\t\t\tstyle={s.footerLogo}\n\t\t\t\t\t\t\t\tresizeMode=\"contain\"\n\t\t\t\t\t\t\t\taccessibilityElementsHidden\n\t\t\t\t\t\t\t\timportantForAccessibility=\"no-hide-descendants\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text style={s.footerBrand}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t</ScrollView>\n\t\t\t\t</View>\n\t\t\t</KeyboardAvoidingView>\n\t\t</Modal>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tkeyboardAvoid: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t},\n\tmodalOverlay: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t\tbackgroundColor: PAYMAN.modalBackdrop,\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 24,\n\t},\n\tscrollContent: {\n\t\tflexGrow: 1,\n\t\twidth: \"100%\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t},\n\tdialog: {\n\t\tposition: \"relative\",\n\t\tbackgroundColor: PAYMAN.card,\n\t\tborderRadius: 16,\n\t\tpaddingTop: 36,\n\t\tpaddingHorizontal: DIALOG_PADDING,\n\t\tpaddingBottom: 28,\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN.border,\n\t},\n\tcloseBtn: {\n\t\tposition: \"absolute\",\n\t\tright: 10,\n\t\ttop: 10,\n\t\twidth: 28,\n\t\theight: 28,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 2,\n\t},\n\tdescription: {\n\t\tfontSize: 14,\n\t\tlineHeight: 20,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 20,\n\t\tpaddingHorizontal: 24,\n\t},\n\ttransferLabel: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t\topacity: 0.7,\n\t},\n\theroAmount: {\n\t\tfontSize: 42,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 32,\n\t\tletterSpacing: -0.5,\n\t},\n\theroPayeeWrap: {\n\t\talignItems: \"center\",\n\t\tmarginBottom: 32,\n\t\tgap: 4,\n\t},\n\theroPayeeName: {\n\t\tfontSize: 28,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t},\n\theroPayeeType: {\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\topacity: 0.85,\n\t},\n\totpWrap: {\n\t\tmarginBottom: 30,\n\t},\n\tverifyingRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tmarginTop: 10,\n\t},\n\tverifyingText: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t},\n\tlinksCol: {\n\t\talignItems: \"center\",\n\t\tgap: 12,\n\t\tmarginBottom: 32,\n\t},\n\tlinkText: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.02,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t},\n\tlinkDisabled: {\n\t\topacity: 0.4,\n\t},\n\tfooter: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tflexWrap: \"nowrap\",\n\t\tgap: 6,\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: PAYMAN.border,\n\t\tpaddingTop: 20,\n\t},\n\tfooterPrefix: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\topacity: 0.9,\n\t},\n\tfooterLogo: {\n\t\theight: 18,\n\t\twidth: 18,\n\t},\n\tfooterBrand: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"700\",\n\t\tletterSpacing: 0.3,\n\t\tcolor: \"#0A3B44\",\n\t},\n});\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import * as Sentry from \"@sentry/react\";\n\nexport interface ChatSessionContext {\n\tsessionId?: string;\n\tsessionOwnerId?: string;\n\tworkflowName?: string;\n\texecutionId?: string;\n\tcfRay?: string;\n\troute?: string;\n\tcustomerId?: string;\n\tcustomerEmail?: string;\n}\n\n/**\n * Reports an error to Sentry enriched with chat session context.\n * Tags and context are scoped to this event so they don't leak\n * to unrelated errors.\n *\n * No-op when Sentry is not initialised.\n */\nexport function captureSentryError(\n\terror: Error | string,\n\tcontext: ChatSessionContext\n): void {\n\tif (!Sentry.getClient()) return;\n\n\tconst tags: Record<string, string> = {};\n\tif (context.executionId) tags.executionId = context.executionId;\n\tif (context.sessionId) tags.sessionId = context.sessionId;\n\tif (context.route) tags.route = context.route;\n\tif (context.cfRay) tags.cfRay = context.cfRay;\n\n\tif (context.customerId) tags.customerId = context.customerId;\n\tif (context.customerEmail) tags.customerEmail = context.customerEmail;\n\n\tconst contexts = {\n\t\tchat_session: {\n\t\t\tsessionId: context.sessionId ?? null,\n\t\t\tsessionOwnerId: context.sessionOwnerId ?? null,\n\t\t\texecutionId: context.executionId ?? null,\n\t\t\tworkflowName: context.workflowName ?? null,\n\t\t\tcfRay: context.cfRay ?? null,\n\t\t\tcustomerId: context.customerId ?? null,\n\t\t\tcustomerEmail: context.customerEmail ?? null,\n\t\t},\n\t};\n\n\tif (typeof error === \"string\") {\n\t\tSentry.captureMessage(error, { level: \"error\", tags, contexts });\n\t} else {\n\t\tSentry.captureException(error, { tags, contexts });\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Targeted fetch interceptor for capturing cf-ray headers\n// ---------------------------------------------------------------------------\n\ntype CfRayListener = (cfRay: string) => void;\n\ninterface InterceptorEntry {\n\turlPattern: string;\n\tlistener: CfRayListener;\n}\n\nconst interceptors: Set<InterceptorEntry> = new Set();\nlet originalFetch: typeof globalThis.fetch | null = null;\n\nfunction patchFetch(): void {\n\tif (originalFetch !== null) return;\n\tif (typeof globalThis === \"undefined\" || typeof globalThis.fetch !== \"function\")\n\t\treturn;\n\n\toriginalFetch = globalThis.fetch;\n\n\tglobalThis.fetch = async function (\n\t\tthis: typeof globalThis,\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit\n\t): Promise<Response> {\n\t\tconst response = await originalFetch!.call(this, input, init);\n\n\t\tif (interceptors.size > 0) {\n\t\t\tconst url =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? input\n\t\t\t\t\t: input instanceof URL\n\t\t\t\t\t\t? input.href\n\t\t\t\t\t\t: (input as Request).url;\n\n\t\t\ttry {\n\t\t\t\tconst cfRay = response.headers.get(\"cf-ray\");\n\t\t\t\tif (cfRay) {\n\t\t\t\t\tfor (const entry of interceptors) {\n\t\t\t\t\t\tif (url.includes(entry.urlPattern)) {\n\t\t\t\t\t\t\tentry.listener(cfRay);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// headers may be inaccessible on opaque responses\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t};\n}\n\nfunction maybeUnpatchFetch(): void {\n\tif (interceptors.size > 0 || originalFetch === null) return;\n\tglobalThis.fetch = originalFetch;\n\toriginalFetch = null;\n}\n\n/**\n * Registers a listener that receives the `cf-ray` header value whenever a\n * fetch response URL contains `urlPattern`.\n *\n * Returns an unsubscribe function (call on unmount).\n */\nexport function subscribeToCfRay(\n\turlPattern: string,\n\tlistener: CfRayListener\n): () => void {\n\tconst entry: InterceptorEntry = { urlPattern, listener };\n\tpatchFetch();\n\tinterceptors.add(entry);\n\treturn () => {\n\t\tinterceptors.delete(entry);\n\t\tmaybeUnpatchFetch();\n\t};\n}\n","import { useState } from \"react\";\nimport { MessageCircle, X, ChevronDown } from \"lucide-react\";\nimport { PaymanChat } from \"../PaymanChat\";\nimport type { ChatConfig, ChatCallbacks } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport interface FloatingChatProps {\n\tconfig: ChatConfig;\n\tcallbacks?: ChatCallbacks;\n\tbuttonPosition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\tbuttonSize?: \"sm\" | \"md\" | \"lg\";\n\tbuttonColor?: string;\n\tbuttonIcon?: React.ReactNode;\n\tbuttonIconUrl?: string;\n\twindowWidth?: string | number;\n\twindowHeight?: string | number;\n\theaderTitle?: string;\n\theaderSubtitle?: string;\n\theaderAvatar?: string;\n\theaderColor?: string;\n\tdefaultOpen?: boolean;\n\tshowNotificationBadge?: boolean;\n}\n\nexport function FloatingChat({\n\tconfig,\n\tcallbacks = {},\n\tbuttonPosition = \"bottom-right\",\n\tbuttonSize = \"md\",\n\tbuttonColor,\n\tbuttonIcon,\n\tbuttonIconUrl,\n\twindowWidth = 380,\n\twindowHeight = 560,\n\theaderTitle = \"AI Assistant\",\n\theaderSubtitle = \"Online • Ready to help\",\n\theaderAvatar = \"🤖\",\n\theaderColor,\n\tdefaultOpen = false,\n\tshowNotificationBadge = false,\n}: FloatingChatProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\tconst toggleChat = () => setIsOpen(!isOpen);\n\n\tconst buttonSizes = { sm: \"w-12 h-12\", md: \"w-14 h-14\", lg: \"w-16 h-16\" };\n\tconst iconSizes = { sm: \"w-5 h-5\", md: \"w-6 h-6\", lg: \"w-7 h-7\" };\n\n\tconst positions = {\n\t\t\"bottom-right\": \"bottom-5 right-5\",\n\t\t\"bottom-left\": \"bottom-5 left-5\",\n\t\t\"top-right\": \"top-5 right-5\",\n\t\t\"top-left\": \"top-5 left-5\",\n\t};\n\n\tconst windowPositions = {\n\t\t\"bottom-right\": \"bottom-[5.5rem] right-5\",\n\t\t\"bottom-left\": \"bottom-[5.5rem] left-5\",\n\t\t\"top-right\": \"top-[5.5rem] right-5\",\n\t\t\"top-left\": \"top-[5.5rem] left-5\",\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{/* Floating Button */}\n\t\t\t<button\n\t\t\t\tonClick={toggleChat}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed z-[9999] rounded-full shadow-lg\",\n\t\t\t\t\t\"flex items-center justify-center cursor-pointer border-0 outline-none\",\n\t\t\t\t\t\"hover:scale-105 active:scale-95 transition-transform duration-200\",\n\t\t\t\t\tbuttonSizes[buttonSize],\n\t\t\t\t\tpositions[buttonPosition],\n\t\t\t\t\t!buttonColor && \"bg-foreground text-background\",\n\t\t\t\t)}\n\t\t\t\tstyle={buttonColor ? { background: buttonColor, color: \"#fff\" } : undefined}\n\t\t\t\taria-label={isOpen ? \"Close chat\" : \"Open chat\"}\n\t\t\t>\n\t\t\t\t{showNotificationBadge && !isOpen && (\n\t\t\t\t\t<span className=\"absolute -top-0.5 -right-0.5 w-3 h-3 bg-red-500 rounded-full border-2 border-background\" />\n\t\t\t\t)}\n\t\t\t\t{buttonIcon ? (\n\t\t\t\t\tbuttonIcon\n\t\t\t\t) : buttonIconUrl ? (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={buttonIconUrl}\n\t\t\t\t\t\talt=\"Chat\"\n\t\t\t\t\t\tclassName={cn(\"object-contain\", iconSizes[buttonSize])}\n\t\t\t\t\t/>\n\t\t\t\t) : isOpen ? (\n\t\t\t\t\t<X className={cn(iconSizes[buttonSize])} />\n\t\t\t\t) : (\n\t\t\t\t\t<MessageCircle className={cn(iconSizes[buttonSize])} />\n\t\t\t\t)}\n\t\t\t</button>\n\n\t\t\t{/* Chat Window */}\n\t\t\t{isOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed z-[9998] bg-card rounded-2xl shadow-2xl overflow-hidden flex flex-col\",\n\t\t\t\t\t\t\"border border-border/60\",\n\t\t\t\t\t\t\"animate-fade-in-up\",\n\t\t\t\t\t\twindowPositions[buttonPosition],\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: typeof windowWidth === \"number\" ? `${windowWidth}px` : windowWidth,\n\t\t\t\t\t\theight: typeof windowHeight === \"number\" ? `${windowHeight}px` : windowHeight,\n\t\t\t\t\t\tmaxWidth: \"calc(100vw - 40px)\",\n\t\t\t\t\t\tmaxHeight: \"calc(100vh - 120px)\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"px-4 py-3 flex items-center justify-between shrink-0\",\n\t\t\t\t\t\t\t!headerColor && \"bg-foreground text-background\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={headerColor ? { background: headerColor, color: \"#fff\" } : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex items-center gap-3 min-w-0\">\n\t\t\t\t\t\t\t<div className=\"w-9 h-9 rounded-xl bg-white/15 flex items-center justify-center text-lg shrink-0\">\n\t\t\t\t\t\t\t\t{headerAvatar}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t\t<h3 className=\"font-semibold text-sm leading-tight truncate\">\n\t\t\t\t\t\t\t\t\t{headerTitle}\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t<p className=\"text-[11px] opacity-70 leading-tight truncate\">\n\t\t\t\t\t\t\t\t\t{headerSubtitle}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={toggleChat}\n\t\t\t\t\t\t\tclassName=\"w-8 h-8 rounded-lg hover:bg-white/10 flex items-center justify-center transition-colors shrink-0\"\n\t\t\t\t\t\t\taria-label=\"Minimize chat\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronDown className=\"w-4 h-4\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Chat Body */}\n\t\t\t\t\t<div className=\"flex-1 overflow-hidden\">\n\t\t\t\t\t\t<PaymanChat\n\t\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\t\tcallbacks={callbacks}\n\t\t\t\t\t\t\tclassName=\"h-full border-0 rounded-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}","import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/** Clear all messages and reset the chat. */\n\tresetSession: () => void;\n\t/** Clear all messages without resetting the session id. */\n\tclearMessages: () => void;\n\t/** Prepend older messages (history pagination). */\n\tprependMessages: (messages: MessageDisplay[]) => void;\n\t/** Cancel the active stream. */\n\tcancelStream: () => void;\n\t/** Current session id, if any. */\n\tgetSessionId: () => string | undefined;\n\t/** All current messages. */\n\tgetMessages: () => MessageDisplay[];\n\t/**\n\t * Replace the active chat with a prior session's conversation history.\n\t * Same call the built-in sidebar uses; exposed for advanced consumers.\n\t */\n\tloadSession: (sessionId: string) => Promise<void>;\n\t/** Whether a stream is currently in flight. */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<PaymanChatContextValue | undefined>(undefined);\n\n/**\n * Access PaymanChat controls from a child of `<PaymanChat>`.\n *\n * @example\n * ```tsx\n * const chat = usePaymanChat();\n * chat.loadSession(sessionId);\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst ctx = useContext(PaymanChatContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn ctx;\n}\n","/**\n * Format an ISO timestamp as a human-friendly relative label:\n * \"just now\" / \"Nm ago\" / \"Nh ago\" / \"Yesterday\" / \"<day>\" (this week) / \"Mon D\" / \"Mon D, YYYY\"\n *\n * No dayjs / date-fns — deliberately ~0 bytes extra.\n */\nexport function formatRelativeTime(iso: string, now: Date = new Date()): string {\n\tconst then = new Date(iso);\n\tif (Number.isNaN(then.getTime())) return \"\";\n\n\tconst diffMs = now.getTime() - then.getTime();\n\tconst diffSec = Math.round(diffMs / 1000);\n\tconst diffMin = Math.round(diffMs / 60_000);\n\tconst diffHour = Math.round(diffMs / 3_600_000);\n\n\tif (diffSec < 45) return \"just now\";\n\tif (diffMin < 60) return `${diffMin}m ago`;\n\tif (diffHour < 24) return `${diffHour}h ago`;\n\n\tconst thenDate = new Date(then.getFullYear(), then.getMonth(), then.getDate());\n\tconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\tconst dayDiff = Math.round(\n\t\t(today.getTime() - thenDate.getTime()) / 86_400_000,\n\t);\n\n\tif (dayDiff === 1) return \"Yesterday\";\n\tif (dayDiff < 7) {\n\t\treturn then.toLocaleDateString(undefined, { weekday: \"short\" });\n\t}\n\n\tconst sameYear = then.getFullYear() === now.getFullYear();\n\treturn then.toLocaleDateString(undefined, {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: sameYear ? undefined : \"numeric\",\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/v2/ChatInputV2.native.tsx","../src/components/OtpInput/index.native.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/v2/InlineVerificationPanel.native.tsx","../src/utils/errorMessages.ts","../src/components/v2/UserMessageV2.native.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.native.tsx","../src/components/v2/MessageListV2.native.tsx","../src/components/VoiceOverlay/index.native.tsx","../src/components/PaymanChat/index.native.tsx","../src/utils/cn.ts","../src/hooks/useSessionHistory.ts","../src/components/SessionHistorySidebar/index.tsx","../src/components/ChatHeader/index.native.tsx","../src/components/UserActionModal/index.native.tsx","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/components/FloatingChat/index.tsx","../src/contexts/PaymanChatContext.tsx","../src/utils/relativeTime.ts"],"names":["Platform","forwardRef","ChatInputV2","useState","useRef","useImperativeHandle","useCallback","Animated","useEffect","Keyboard","jsxs","View","jsx","TextInput","Pressable","RotateCcw","Plus","Mic","ArrowUp","Text","Modal","X","ImagePlus","Paperclip","StyleSheet","newDigits","s","Easing","ActivityIndicator","Clipboard","AlertCircle","Check","Copy","Pencil","PAYMAN_TEAL","TEXT_PRIMARY","TEXT_SECONDARY","UIManager","useMemo","LayoutAnimation","ChevronRight","buildFormattedThinking","Markdown","WifiOff","MessageListV2","ScrollView","ArrowDown","memo","React","PaymanChat","useChatV2","useVoice","KeyboardAvoidingView","Fragment","twMerge","clsx","listSessions","PanelBottomOpen","useReducedMotion","motion","PanelLeftOpen","AnimatePresence","createPortal","PanelLeftClose","MessageSquare","styles","Dimensions","OTP_ERROR_FLASH_MS","Image","Sentry","MessageCircle","ChevronDown","createContext","useContext"],"mappings":"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","file":"index.native.js","sourcesContent":["import {\n\tforwardRef,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport {\n\tAnimated,\n\tKeyboard,\n\tModal,\n\tPlatform,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tTextInput,\n\tView,\n} from \"react-native\";\nimport {\n\tArrowUp,\n\tImagePlus,\n\tMic,\n\tPaperclip,\n\tPlus,\n\tRotateCcw,\n\tX,\n} from \"lucide-react-native\";\n\nexport type ChatInputV2Props = {\n\tonSend: (message: string) => void;\n\tonCancel?: () => void;\n\tdisabled?: boolean;\n\tisStreaming?: boolean;\n\tplaceholder?: string;\n\tenableVoice?: boolean;\n\tvoiceAvailable?: boolean;\n\tisRecording?: boolean;\n\tonVoicePress?: () => void;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\thideSendButton?: boolean;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\thideDisclaimer?: boolean;\n\ttheme?: \"light\" | \"dark\";\n\ttopAccessory?: ReactNode;\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (text: string) => void;\n\tfocus: () => void;\n};\n\nconst PAYMAN_TEAL = \"#00858d\";\nconst SEND_BUTTON_COLOR = \"#15687d\";\nconst SEND_BUTTON_DISABLED_COLOR = \"#d1d5db\";\nconst INPUT_BOTTOM_MARGIN = Platform.OS === \"ios\" ? 18 : 8;\n\ntype InputPalette = {\n\tsurface: string;\n\tsoft: string;\n\tborder: string;\n\tborderFocused: string;\n\ttextPrimary: string;\n\ttextTertiary: string;\n\ticonGrey: string;\n\tdisclaimer: string;\n};\n\nconst LIGHT_PALETTE: InputPalette = {\n\tsurface: \"#ffffff\",\n\tsoft: \"#f4f4f5\",\n\tborder: \"rgba(15,23,42,0.08)\",\n\tborderFocused: \"rgba(15,23,42,0.16)\",\n\ttextPrimary: \"#0f172a\",\n\ttextTertiary: \"#94a3b8\",\n\ticonGrey: \"#64748b\",\n\tdisclaimer: \"#94a3b8\",\n};\n\nconst DARK_PALETTE: InputPalette = {\n\tsurface: \"#0d1719\",\n\tsoft: \"#162022\",\n\tborder: \"rgba(255,255,255,0.08)\",\n\tborderFocused: \"rgba(255,255,255,0.18)\",\n\ttextPrimary: \"#f0f9fa\",\n\ttextTertiary: \"rgba(240,249,250,0.40)\",\n\ticonGrey: \"rgba(240,249,250,0.55)\",\n\tdisclaimer: \"rgba(240,249,250,0.38)\",\n};\n\nconst INPUT_FONT_SIZE = 15;\nconst INPUT_LINE_HEIGHT = 22;\nconst INPUT_MAX_HEIGHT = INPUT_LINE_HEIGHT * 8;\n\nconst ANDROID_RIPPLE_DARK = { color: \"rgba(15,23,42,0.10)\", borderless: false } as const;\nconst ANDROID_RIPPLE_LIGHT = { color: \"rgba(255,255,255,0.20)\", borderless: false } as const;\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Type your message…\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\thideSendButton = false,\n\t\t\tshowAttachmentButton,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\thideDisclaimer = false,\n\t\t\ttheme = \"light\",\n\t\t\ttopAccessory,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst p = theme === \"dark\" ? DARK_PALETTE : LIGHT_PALETTE;\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [isKeyboardVisible, setIsKeyboardVisible] = useState(false);\n\t\tconst [sheetOpen, setSheetOpen] = useState(false);\n\t\tconst textInputRef = useRef<TextInput>(null);\n\n\t\tconst hasAttachmentOptions =\n\t\t\t(!!onUploadImageClick && showUploadImageButton) ||\n\t\t\t(!!onAttachFileClick && showAttachFileButton);\n\t\tconst showAttachmentMenuButton =\n\t\t\t(showAttachmentButton ?? true) && hasAttachmentOptions;\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (text: string) => {\n\t\t\t\t\tsetValue(text);\n\t\t\t\t\trequestAnimationFrame(() => textInputRef.current?.focus());\n\t\t\t\t},\n\t\t\t\tfocus: () => textInputRef.current?.focus(),\n\t\t\t}),\n\t\t\t[],\n\t\t);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tconst trimmed = value.trim();\n\t\t\tif (!trimmed || disabled) return;\n\t\t\tonSend(trimmed);\n\t\t\tsetValue(\"\");\n\t\t}, [value, disabled, onSend]);\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\t\tconst showVoiceButton = enableVoice && !!onVoicePress;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\t\tconst hasTopAccessory = topAccessory != null;\n\n\t\tconst sendScale = useRef(new Animated.Value(1)).current;\n\t\tuseEffect(() => {\n\t\t\tAnimated.spring(sendScale, {\n\t\t\t\ttoValue: canSend && !isStreaming ? 1 : 0.94,\n\t\t\t\tuseNativeDriver: true,\n\t\t\t\tfriction: 6,\n\t\t\t\ttension: 180,\n\t\t\t}).start();\n\t\t}, [canSend, isStreaming, sendScale]);\n\n\t\tconst handleAttachmentPress = useCallback(() => {\n\t\t\tif (disabled || isRecording) return;\n\t\t\tsetSheetOpen(true);\n\t\t}, [disabled, isRecording]);\n\n\t\tconst closeSheet = useCallback(() => setSheetOpen(false), []);\n\n\t\tuseEffect(() => {\n\t\t\tconst showEvent =\n\t\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillShow\" : \"keyboardDidShow\";\n\t\t\tconst hideEvent =\n\t\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillHide\" : \"keyboardDidHide\";\n\n\t\t\tconst showSub = Keyboard.addListener(showEvent, () => {\n\t\t\t\tsetIsKeyboardVisible(true);\n\t\t\t});\n\t\t\tconst hideSub = Keyboard.addListener(hideEvent, () => {\n\t\t\t\tsetIsKeyboardVisible(false);\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tshowSub.remove();\n\t\t\t\thideSub.remove();\n\t\t\t};\n\t\t}, []);\n\n\t\tconst handlePickImage = useCallback(() => {\n\t\t\tcloseSheet();\n\t\t\tonUploadImageClick?.();\n\t\t}, [closeSheet, onUploadImageClick]);\n\n\t\tconst handlePickFile = useCallback(() => {\n\t\t\tcloseSheet();\n\t\t\tonAttachFileClick?.();\n\t\t}, [closeSheet, onAttachFileClick]);\n\n\t\treturn (\n\t\t\t<View\n\t\t\t\tstyle={[\n\t\t\t\t\ts.outer,\n\t\t\t\t\t{\n\t\t\t\t\t\tbackgroundColor: p.surface,\n\t\t\t\t\t\tmarginBottom: isKeyboardVisible ? 0 : INPUT_BOTTOM_MARGIN,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{hasTopAccessory ? (\n\t\t\t\t\t<View style={s.topAccessory}>{topAccessory}</View>\n\t\t\t\t) : null}\n\t\t\t\t<View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.wrapper,\n\t\t\t\t\t\thasTopAccessory && s.wrapperWithTopAccessory,\n\t\t\t\t\t\t{ backgroundColor: p.soft, borderColor: p.border },\n\t\t\t\t\t\t(isFocused || isRecording) && { borderColor: p.borderFocused },\n\t\t\t\t\t\tdisabled && s.wrapperDisabled,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t{/* Text input */}\n\t\t\t\t\t<View style={s.inputRow}>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tref={textInputRef}\n\t\t\t\t\t\t\tstyle={[s.input, { color: p.textPrimary }]}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChangeText={(t) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tsetValue(t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tplaceholderTextColor={p.textTertiary}\n\t\t\t\t\t\t\tmultiline\n\t\t\t\t\t\t\teditable={!disabled && !isRecording}\n\t\t\t\t\t\t\treturnKeyType=\"default\"\n\t\t\t\t\t\t\tblurOnSubmit={false}\n\t\t\t\t\t\t\tscrollEnabled\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\n\t\t\t\t\t{/* Controls row */}\n\t\t\t\t\t<View style={s.controls}>\n\t\t\t\t\t\t<View style={s.leftControls}>\n\t\t\t\t\t\t\t{showResetSession && onResetSession ? (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\ts.iconBtn,\n\t\t\t\t\t\t\t\t\t\t(isStreaming || isRecording) && s.iconBtnDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t\t\t\thitSlop={6}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"New session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw size={18} color={p.iconGrey} strokeWidth={2} />\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showAttachmentMenuButton ? (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={handleAttachmentPress}\n\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\ts.iconBtn,\n\t\t\t\t\t\t\t\t\t\t(disabled || isRecording) && s.iconBtnDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t\t\t\thitSlop={6}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Attach\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Plus size={20} color={p.iconGrey} strokeWidth={2} />\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.rightControls}>\n\t\t\t\t\t\t\t{showVoiceButton ? (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onVoicePress}\n\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\ts.iconBtn,\n\t\t\t\t\t\t\t\t\t\tisRecording && s.iconBtnRecording,\n\t\t\t\t\t\t\t\t\t\tisVoiceButtonDisabled && s.iconBtnDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t\t\t\thitSlop={6}\n\t\t\t\t\t\t\t\t\taccessibilityLabel={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Mic\n\t\t\t\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\t\t\t\tcolor={isRecording ? PAYMAN_TEAL : p.iconGrey}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{!hideSendButton ? (\n\t\t\t\t\t\t\t\t<Animated.View style={{ transform: [{ scale: sendScale }] }}>\n\t\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\t\tonPress={handleSend}\n\t\t\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\t\t\tstyle={[s.sendBtn, sendDisabled && s.sendBtnIdle]}\n\t\t\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_LIGHT}\n\t\t\t\t\t\t\t\t\t\thitSlop={4}\n\t\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Send\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ArrowUp size={18} color=\"#fff\" strokeWidth={2.75} />\n\t\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t\t</Animated.View>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\n\t\t\t\t{!hideDisclaimer ? (\n\t\t\t\t\t<Text style={[s.disclaimer, { color: p.disclaimer }]}>\n\t\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t\t</Text>\n\t\t\t\t) : null}\n\n\t\t\t\t<AttachmentSheet\n\t\t\t\t\tvisible={sheetOpen}\n\t\t\t\t\tonClose={closeSheet}\n\t\t\t\t\tshowImage={!!onUploadImageClick && showUploadImageButton}\n\t\t\t\t\tshowFile={!!onAttachFileClick && showAttachFileButton}\n\t\t\t\t\tonPickImage={handlePickImage}\n\t\t\t\t\tonPickFile={handlePickFile}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t},\n);\n\n// ─── Attachment bottom sheet ─────────────────────────────────────────────────\n\nfunction AttachmentSheet({\n\tvisible,\n\tonClose,\n\tshowImage,\n\tshowFile,\n\tonPickImage,\n\tonPickFile,\n}: {\n\tvisible: boolean;\n\tonClose: () => void;\n\tshowImage: boolean;\n\tshowFile: boolean;\n\tonPickImage: () => void;\n\tonPickFile: () => void;\n}) {\n\tconst translateY = useRef(new Animated.Value(80)).current;\n\tconst opacity = useRef(new Animated.Value(0)).current;\n\n\tuseEffect(() => {\n\t\tif (visible) {\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tduration: 180,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t\tAnimated.spring(translateY, {\n\t\t\t\t\ttoValue: 0,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\tfriction: 9,\n\t\t\t\t\ttension: 90,\n\t\t\t\t}),\n\t\t\t]).start();\n\t\t} else {\n\t\t\ttranslateY.setValue(80);\n\t\t\topacity.setValue(0);\n\t\t}\n\t}, [visible, opacity, translateY]);\n\n\treturn (\n\t\t<Modal\n\t\t\tvisible={visible}\n\t\t\ttransparent\n\t\t\tanimationType=\"none\"\n\t\t\tonRequestClose={onClose}\n\t\t>\n\t\t\t<Animated.View style={[sheet.backdrop, { opacity }]}>\n\t\t\t\t<Pressable style={sheet.backdropPressable} onPress={onClose} />\n\t\t\t</Animated.View>\n\n\t\t\t<View style={sheet.sheetWrap} pointerEvents=\"box-none\">\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tsheet.sheet,\n\t\t\t\t\t\t{ transform: [{ translateY }], opacity },\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<View style={sheet.handle} />\n\n\t\t\t\t\t<View style={sheet.headerRow}>\n\t\t\t\t\t\t<Text style={sheet.title}>Add to message</Text>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={onClose}\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t\tstyle={sheet.closeBtn}\n\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={18} color=\"#6b6b67\" strokeWidth={2.25} />\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t</View>\n\n\t\t\t\t\t<View style={sheet.options}>\n\t\t\t\t\t\t{showImage ? (\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={onPickImage}\n\t\t\t\t\t\t\t\tstyle={sheet.option}\n\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<View style={sheet.optionIconWrap}>\n\t\t\t\t\t\t\t\t\t<ImagePlus size={20} color={PAYMAN_TEAL} strokeWidth={2} />\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t<View style={{ flex: 1 }}>\n\t\t\t\t\t\t\t\t\t<Text style={sheet.optionTitle}>Upload image</Text>\n\t\t\t\t\t\t\t\t\t<Text style={sheet.optionSubtitle}>From your camera roll</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{showFile ? (\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={onPickFile}\n\t\t\t\t\t\t\t\tstyle={sheet.option}\n\t\t\t\t\t\t\t\tandroid_ripple={ANDROID_RIPPLE_DARK}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<View style={sheet.optionIconWrap}>\n\t\t\t\t\t\t\t\t\t<Paperclip size={20} color={PAYMAN_TEAL} strokeWidth={2} />\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t<View style={{ flex: 1 }}>\n\t\t\t\t\t\t\t\t\t<Text style={sheet.optionTitle}>Attach file</Text>\n\t\t\t\t\t\t\t\t\t<Text style={sheet.optionSubtitle}>PDFs, documents and more</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</View>\n\t\t\t\t</Animated.View>\n\t\t\t</View>\n\t\t</Modal>\n\t);\n}\n\n// ─── Styles ──────────────────────────────────────────────────────────────────\n\nconst s = StyleSheet.create({\n\touter: {\n\t\tpaddingHorizontal: 12,\n\t\tpaddingTop: 6,\n\t\tpaddingBottom: 6,\n\t},\n\ttopAccessory: {\n\t\tmarginBottom: -1,\n\t\tzIndex: 1,\n\t},\n\twrapper: {\n\t\tborderRadius: 24,\n\t\tborderWidth: 1,\n\t\tpaddingHorizontal: 6,\n\t\tpaddingTop: 2,\n\t\tpaddingBottom: 6,\n\t},\n\twrapperWithTopAccessory: {\n\t\tborderTopLeftRadius: 0,\n\t\tborderTopRightRadius: 0,\n\t},\n\twrapperFocused: {\n\t\t...Platform.select({\n\t\t\tios: {\n\t\t\t\tshadowColor: \"#000\",\n\t\t\t\tshadowOpacity: 0.04,\n\t\t\t\tshadowRadius: 10,\n\t\t\t\tshadowOffset: { width: 0, height: 2 },\n\t\t\t},\n\t\t\tandroid: { elevation: 0 },\n\t\t}),\n\t},\n\twrapperDisabled: { opacity: 0.6 },\n\tinputRow: {\n\t\tmaxHeight: INPUT_MAX_HEIGHT,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingTop: 10,\n\t\tpaddingBottom: 4,\n\t},\n\tinput: {\n\t\tfontSize: INPUT_FONT_SIZE,\n\t\tlineHeight: INPUT_LINE_HEIGHT,\n\t\tincludeFontPadding: false,\n\t\ttextAlignVertical: \"top\",\n\t\tpadding: 0,\n\t\tmargin: 0,\n\t},\n\tcontrols: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tpaddingHorizontal: 2,\n\t\tpaddingTop: 2,\n\t},\n\tleftControls: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 2,\n\t},\n\trightControls: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 2,\n\t},\n\ticonBtn: {\n\t\twidth: 32,\n\t\theight: 32,\n\t\tborderRadius: 16,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\ticonBtnDisabled: { opacity: 0.4 },\n\ticonBtnRecording: { backgroundColor: \"rgba(0,133,141,0.10)\" },\n\tsendBtn: {\n\t\twidth: 34,\n\t\theight: 34,\n\t\tborderRadius: 17,\n\t\tbackgroundColor: SEND_BUTTON_COLOR,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tmarginLeft: 2,\n\t\t...Platform.select({\n\t\t\tios: {\n\t\t\t\tshadowColor: SEND_BUTTON_COLOR,\n\t\t\t\tshadowOpacity: 0.32,\n\t\t\t\tshadowRadius: 10,\n\t\t\t\tshadowOffset: { width: 0, height: 4 },\n\t\t\t},\n\t\t\tandroid: { elevation: 3 },\n\t\t}),\n\t},\n\tsendBtnIdle: {\n\t\tbackgroundColor: SEND_BUTTON_DISABLED_COLOR,\n\t\topacity: 1,\n\t\tshadowOpacity: 0,\n\t},\n\tdisclaimer: {\n\t\tfontSize: 11,\n\t\ttextAlign: \"center\",\n\t\tmarginTop: 8,\n\t\tpaddingHorizontal: 16,\n\t},\n});\n\nconst sheet = StyleSheet.create({\n\tbackdrop: {\n\t\t...StyleSheet.absoluteFillObject,\n\t\tbackgroundColor: \"rgba(15,23,42,0.35)\",\n\t},\n\tbackdropPressable: { flex: 1 },\n\tsheetWrap: {\n\t\t...StyleSheet.absoluteFillObject,\n\t\tjustifyContent: \"flex-end\",\n\t},\n\tsheet: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderTopLeftRadius: 24,\n\t\tborderTopRightRadius: 24,\n\t\tpaddingHorizontal: 20,\n\t\tpaddingTop: 8,\n\t\tpaddingBottom: 36,\n\t\t...Platform.select({\n\t\t\tios: {\n\t\t\t\tshadowColor: \"#000\",\n\t\t\t\tshadowOpacity: 0.18,\n\t\t\t\tshadowRadius: 24,\n\t\t\t\tshadowOffset: { width: 0, height: -4 },\n\t\t\t},\n\t\t\tandroid: { elevation: 16 },\n\t\t}),\n\t},\n\thandle: {\n\t\talignSelf: \"center\",\n\t\twidth: 44,\n\t\theight: 4,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: \"rgba(15,23,42,0.12)\",\n\t\tmarginBottom: 12,\n\t},\n\theaderRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tmarginBottom: 12,\n\t},\n\ttitle: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#1d1d1f\",\n\t},\n\tcloseBtn: {\n\t\twidth: 30,\n\t\theight: 30,\n\t\tborderRadius: 15,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tbackgroundColor: \"rgba(15,23,42,0.04)\",\n\t},\n\toptions: { gap: 8 },\n\toption: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 12,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingVertical: 14,\n\t\tborderRadius: 14,\n\t\tbackgroundColor: \"#f8fafc\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(15,23,42,0.06)\",\n\t},\n\toptionIconWrap: {\n\t\twidth: 38,\n\t\theight: 38,\n\t\tborderRadius: 19,\n\t\tbackgroundColor: \"rgba(0,133,141,0.10)\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\toptionTitle: {\n\t\tfontSize: 15,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#1d1d1f\",\n\t},\n\toptionSubtitle: {\n\t\tfontSize: 12,\n\t\tcolor: \"#6b6b67\",\n\t\tmarginTop: 2,\n\t},\n});\n","import { useEffect, useRef, useState } from \"react\";\nimport { TextInput, StyleSheet, Animated } from \"react-native\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst OTP_ERROR_BORDER = \"#ef4444\";\nconst COMPLETE_PULSE_MS = 350;\nconst SHAKE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(TextInput | null)[]>([]);\n\tconst shakeAnim = useRef(new Animated.Value(0)).current;\n\tconst scaleAnim = useRef(new Animated.Value(1)).current;\n\tconst prevLenRef = useRef(0);\n\tconst [internalError, setInternalError] = useState(false);\n\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\tconst digits = value\n\t\t.split(\"\")\n\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t.slice(0, safeMaxLength);\n\n\tconst isFull = value.length === safeMaxLength && /^\\d+$/.test(value);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (!disabled) {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}\n\t}, [disabled]);\n\n\t// Error shake\n\tuseEffect(() => {\n\t\tif (!error) {\n\t\t\tsetInternalError(false);\n\t\t\treturn;\n\t\t}\n\t\tsetInternalError(true);\n\t\tAnimated.sequence([\n\t\t\tAnimated.timing(shakeAnim, { toValue: 1, duration: SHAKE_MS, useNativeDriver: true }),\n\t\t\tAnimated.timing(shakeAnim, { toValue: 0, duration: 0, useNativeDriver: true }),\n\t\t]).start();\n\t}, [error, shakeAnim]);\n\n\t// Completion pulse\n\tuseEffect(() => {\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1.04, duration: COMPLETE_PULSE_MS * 0.4, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1, duration: COMPLETE_PULSE_MS * 0.6, useNativeDriver: true }),\n\t\t\t]).start();\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t}, [isFull, value.length, safeMaxLength, scaleAnim]);\n\n\tconst shakeTranslate = shakeAnim.interpolate({\n\t\tinputRange: [0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1],\n\t\toutputRange: [0, -6, 5, -4, 3, -2, 1, 0],\n\t});\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, text: string) => {\n\t\tconst cleaned = text.replace(/\\D/g, \"\");\n\t\tif (cleaned.length > 1) {\n\t\t\tconst pasted = cleaned.slice(0, safeMaxLength);\n\t\t\tconst newDigits = pasted\n\t\t\t\t.split(\"\")\n\t\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t\t.slice(0, safeMaxLength);\n\t\t\tupdateValue(newDigits);\n\t\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t\t\treturn;\n\t\t}\n\n\t\tconst char = cleaned.slice(-1);\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyPress = (index: number, key: string) => {\n\t\tif (key === \"Backspace\") {\n\t\t\tif (digits[index]) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[\n\t\t\t\ts.container,\n\t\t\t\t{ transform: [{ translateX: shakeTranslate }, { scale: scaleAnim }] },\n\t\t\t]}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<TextInput\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\teditable={!disabled}\n\t\t\t\t\tkeyboardType=\"number-pad\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tonChangeText={(text) => handleChange(i, text)}\n\t\t\t\t\tonKeyPress={({ nativeEvent }) => handleKeyPress(i, nativeEvent.key)}\n\t\t\t\t\tonFocus={() => inputRefs.current[i]?.setNativeProps({ selection: { start: 0, end: 1 } })}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.input,\n\t\t\t\t\t\tdisabled && s.inputDisabled,\n\t\t\t\t\t\tinternalError && s.inputError,\n\t\t\t\t\t]}\n\t\t\t\t\taccessibilityLabel={`Digit ${i + 1}`}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Animated.View>\n\t);\n}\n\nconst PAYMAN_OTP = {\n\tbg: \"#FFFFFF\",\n\tborder: \"rgba(0,0,0,0.1)\",\n\tfg: \"#18181b\",\n\tdisabledBg: \"rgba(0,0,0,0.03)\",\n};\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", gap: 8, justifyContent: \"center\" },\n\tinput: {\n\t\twidth: 44,\n\t\theight: 50,\n\t\ttextAlign: \"center\",\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN_OTP.border,\n\t\tborderRadius: 10,\n\t\tcolor: PAYMAN_OTP.fg,\n\t\tbackgroundColor: PAYMAN_OTP.bg,\n\t},\n\tinputDisabled: { backgroundColor: PAYMAN_OTP.disabledBg, opacity: 0.5 },\n\tinputError: {\n\t\tborderColor: OTP_ERROR_BORDER,\n\t\tborderWidth: 1.5,\n\t},\n});\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n\t/** Link-style actions (new layout) */\n\tRESEND_CODE: \"Resend OTP\",\n\tCANCEL_TRANSFER: \"Cancel Payment\",\n\t/** Short cancel label for payee approval flows */\n\tCANCEL: \"Cancel\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n\tSECURED_BY_PREFIX: \"Secured by\",\n\tSECURED_BY_BRAND: \"Payman\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n\n/**\n * Format backend amount string (e.g. \"2500.00\", \"53.00\") for display as USD.\n */\nexport function formatAmountForDisplay(amount: string): string {\n\tconst normalized = amount.replace(/,/g, \"\").trim();\n\tconst n = Number(normalized);\n\tif (!Number.isFinite(n)) {\n\t\treturn amount.startsWith(\"$\") ? amount : `$${amount}`;\n\t}\n\treturn new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: \"USD\",\n\t}).format(n);\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tActivityIndicator,\n\tAnimated,\n\tEasing,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport type { UserActionRequest } from \"../../types\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tMODAL_CONTENT,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n} from \"../UserActionModal/constants\";\nimport { getOtpSchemaFromRequest } from \"../UserActionModal/utils\";\n\ntype InlineVerificationPanelProps = {\n\tuserActionRequest: UserActionRequest | null;\n\tclearOtpTrigger: number;\n\tonApprove: (otp: string) => Promise<void>;\n\tonReject: () => Promise<void>;\n\tonResend: () => Promise<void>;\n};\n\nconst BRAND = \"#15687d\";\nconst TEXT_PRIMARY = \"#111827\";\nconst TEXT_SECONDARY = \"#64748b\";\nconst BORDER = \"rgba(15,23,42,0.10)\";\nconst OTP_ERROR_FLASH_MS = 600;\n\nexport function InlineVerificationPanel({\n\tuserActionRequest,\n\tclearOtpTrigger,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: InlineVerificationPanelProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\n\t\t\"approve\" | \"reject\" | \"resend\" | null\n\t>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst [otpError, setOtpError] = useState(false);\n\tconst entrance = useRef(new Animated.Value(0)).current;\n\tconst lastAutoSubmittedRef = useRef(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (userActionRequest) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t\tentrance.setValue(0);\n\t\t\tAnimated.timing(entrance, {\n\t\t\t\ttoValue: 1,\n\t\t\t\tduration: 220,\n\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}).start();\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t\tsetOtpError(false);\n\t\t\tlastAutoSubmittedRef.current = \"\";\n\t\t\tsubmitInFlightRef.current = false;\n\t\t\tsubmitGenerationRef.current += 1;\n\t\t}\n\t}, [entrance, resetActionState, userActionRequest]);\n\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\t\tconst timer = setTimeout(\n\t\t\t() => setResendCooldownRemaining((prev) => prev - 1),\n\t\t\t1000,\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger <= 0) return;\n\t\tsetOtpError(true);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetOtpError(false);\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}, OTP_ERROR_FLASH_MS);\n\t\treturn () => clearTimeout(timer);\n\t}, [clearOtpTrigger, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!userActionRequest || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\t\tconst timeout = setTimeout(\n\t\t\t() => resetActionState(),\n\t\t\tACTION_PENDING_TIMEOUT_MS,\n\t\t);\n\t\treturn () => clearTimeout(timeout);\n\t}, [actionType, isSubmitting, resetActionState, userActionRequest]);\n\n\tuseEffect(() => {\n\t\tif (!userActionRequest) return;\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) return;\n\t\tif (isSubmitting || submitInFlightRef.current) return;\n\t\tif (lastAutoSubmittedRef.current === otp) return;\n\n\t\tlastAutoSubmittedRef.current = otp;\n\t\tsubmitInFlightRef.current = true;\n\t\tconst submitGeneration = submitGenerationRef.current;\n\n\t\tvoid (async () => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetActionType(\"approve\");\n\t\t\ttry {\n\t\t\t\tawait onApprove(otp);\n\t\t\t} catch {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tresetActionState();\n\t\t\t\tlastAutoSubmittedRef.current = otp;\n\t\t\t} finally {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tsubmitInFlightRef.current = false;\n\t\t\t}\n\t\t})();\n\t}, [\n\t\tisSubmitting,\n\t\tonApprove,\n\t\totp,\n\t\tresetActionState,\n\t\tschema.maxLength,\n\t\tuserActionRequest,\n\t]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t} catch {\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [onResend, resendCooldownRemaining]);\n\n\tif (!userActionRequest) return null;\n\n\tconst translateY = entrance.interpolate({\n\t\tinputRange: [0, 1],\n\t\toutputRange: [10, 0],\n\t});\n\tconst isVerifying = actionType === \"approve\" && isSubmitting;\n\tconst isCancelling = actionType === \"reject\" && isSubmitting;\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[\n\t\t\t\ts.panel,\n\t\t\t\t{ opacity: entrance, transform: [{ translateY }] },\n\t\t\t]}\n\t\t\taccessibilityLabel=\"payman-inline-verification\"\n\t\t>\n\t\t\t<Text style={s.title}>Enter the verification code sent to your email</Text>\n\t\t\t<View style={s.otpWrap} accessibilityLabel=\"payman-otp-wrap\">\n\t\t\t\t<OtpInput\n\t\t\t\t\tvalue={otp}\n\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\terror={otpError}\n\t\t\t\t/>\n\t\t\t</View>\n\n\t\t\t{isVerifying ? (\n\t\t\t\t<View style={s.statusRow}>\n\t\t\t\t\t<ActivityIndicator size=\"small\" color={BRAND} />\n\t\t\t\t\t<Text style={s.statusText}>{MODAL_CONTENT.LOADING_APPROVE}</Text>\n\t\t\t\t</View>\n\t\t\t) : null}\n\n\t\t\t<View style={s.actions}>\n\t\t\t\t<Pressable\n\t\t\t\t\tonPress={handleResend}\n\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\thitSlop={8}\n\t\t\t\t\taccessibilityLabel=\"payman-inline-verification-resend\"\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\ts.actionText,\n\t\t\t\t\t\t\t(isSubmitting || resendCooldownRemaining > 0) &&\n\t\t\t\t\t\t\t\ts.actionTextDisabled,\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND_CODE}\n\t\t\t\t\t</Text>\n\t\t\t\t</Pressable>\n\n\t\t\t\t<View style={s.divider} />\n\n\t\t\t\t<Pressable\n\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\thitSlop={8}\n\t\t\t\t\taccessibilityLabel=\"payman-inline-verification-cancel\"\n\t\t\t\t>\n\t\t\t\t\t<View style={s.cancelContent}>\n\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t<ActivityIndicator size=\"small\" color={TEXT_SECONDARY} />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\ts.actionText,\n\t\t\t\t\t\t\t\tisSubmitting && !isCancelling && s.actionTextDisabled,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isCancelling ? MODAL_CONTENT.LOADING_REJECT : BUTTON_LABELS.CANCEL}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</Pressable>\n\t\t\t</View>\n\t\t</Animated.View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tpanel: {\n\t\tbackgroundColor: \"#f8fafc\",\n\t\tborderWidth: 1,\n\t\tborderBottomWidth: 0,\n\t\tborderColor: BORDER,\n\t\tborderTopLeftRadius: 24,\n\t\tborderTopRightRadius: 24,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingTop: 14,\n\t\tpaddingBottom: 12,\n\t},\n\ttitle: {\n\t\tcolor: TEXT_PRIMARY,\n\t\tfontSize: 14,\n\t\tfontWeight: \"600\",\n\t\tlineHeight: 20,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 12,\n\t},\n\totpWrap: {\n\t\talignItems: \"center\",\n\t},\n\tstatusRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 8,\n\t\tmarginTop: 10,\n\t},\n\tstatusText: {\n\t\tcolor: TEXT_SECONDARY,\n\t\tfontSize: 12,\n\t\tfontWeight: \"500\",\n\t},\n\tactions: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 12,\n\t\tmarginTop: 12,\n\t},\n\tactionText: {\n\t\tcolor: BRAND,\n\t\tfontSize: 12,\n\t\tfontWeight: \"600\",\n\t},\n\tactionTextDisabled: {\n\t\tcolor: TEXT_SECONDARY,\n\t\topacity: 0.55,\n\t},\n\tdivider: {\n\t\twidth: 1,\n\t\theight: 14,\n\t\tbackgroundColor: BORDER,\n\t},\n\tcancelContent: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 6,\n\t},\n});\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Animated, Clipboard, Easing, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { AlertCircle, Check, Copy, Pencil, RotateCcw } from \"lucide-react-native\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\nimport { getConflictErrorMessage } from \"../../utils/errorMessages\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tactions?: UserMessageActionsConfig;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n};\n\nconst TEAL = \"#00858d\";\n\nexport function UserMessageV2({\n\tmessage,\n\tactions,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showEditAction = actions?.edit ?? false;\n\tconst showRetryAction = actions?.retry ?? false;\n\tconst hasVisibleActions =\n\t\tshowCopyAction ||\n\t\t(showEditAction && !!onEdit) ||\n\t\t(showRetryAction && !!onRetry);\n\n\tconst fadeIn = useRef(new Animated.Value(0)).current;\n\tconst slideIn = useRef(new Animated.Value(8)).current;\n\n\tuseEffect(() => {\n\t\tAnimated.parallel([\n\t\t\tAnimated.timing(fadeIn, {\n\t\t\t\ttoValue: 1,\n\t\t\t\tduration: 200,\n\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}),\n\t\t\tAnimated.timing(slideIn, {\n\t\t\t\ttoValue: 0,\n\t\t\t\tduration: 200,\n\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}),\n\t\t]).start();\n\t}, [fadeIn, slideIn]);\n\n\tconst handleCopy = useCallback(() => {\n\t\tClipboard.setString(message.content);\n\t\tsetCopied(true);\n\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\ttimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t}, [message.content]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\t};\n\t}, []);\n\n\tconst conflictErr = message.errorDetails\n\t\t? getConflictErrorMessage(message.errorDetails) ?? message.errorDetails\n\t\t: null;\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[s.wrapper, { opacity: fadeIn, transform: [{ translateY: slideIn }] }]}\n\t\t>\n\t\t\t<View style={s.bubble}>\n\t\t\t\t<Text selectable style={s.text}>\n\t\t\t\t\t{message.content}\n\t\t\t\t</Text>\n\t\t\t</View>\n\n\t\t\t{message.isError && conflictErr ? (\n\t\t\t\t<View style={s.errorRow}>\n\t\t\t\t\t<AlertCircle size={13} color=\"rgba(239, 68, 68, 0.8)\" strokeWidth={2} />\n\t\t\t\t\t<Text style={s.errorText}>{conflictErr}</Text>\n\t\t\t\t</View>\n\t\t\t) : null}\n\n\t\t\t{hasVisibleActions ? (\n\t\t\t\t<View style={s.actions}>\n\t\t\t\t\t{showCopyAction ? (\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={handleCopy}\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t\tstyle={s.actionBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Copy message\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t<Check size={13} color=\"#059669\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Copy size={13} color=\"#94a3b8\" strokeWidth={2} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t{showEditAction && onEdit ? (\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={() => onEdit(message.id)}\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t\tstyle={s.actionBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Edit message\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Pencil size={13} color=\"#94a3b8\" strokeWidth={2} />\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t{showRetryAction && onRetry ? (\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={() => onRetry(message.id)}\n\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t\tstyle={[s.actionBtn, retryDisabled && s.actionBtnDisabled]}\n\t\t\t\t\t\t\taccessibilityLabel=\"Retry message\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RotateCcw size={13} color=\"#94a3b8\" strokeWidth={2} />\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t) : null}\n\t\t</Animated.View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\twrapper: {\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 5,\n\t\talignItems: \"flex-end\",\n\t},\n\tbubble: {\n\t\tbackgroundColor: TEAL,\n\t\tborderRadius: 20,\n\t\tborderBottomRightRadius: 6,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 10,\n\t\tmaxWidth: 320,\n\t},\n\ttext: {\n\t\tfontSize: 15,\n\t\tlineHeight: 22,\n\t\tcolor: \"#fff\",\n\t},\n\terrorRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"flex-start\",\n\t\tgap: 6,\n\t\tmarginTop: 4,\n\t\tpaddingRight: 4,\n\t\tmaxWidth: 320,\n\t},\n\terrorText: {\n\t\tflex: 1,\n\t\tfontSize: 12,\n\t\tcolor: \"rgba(239, 68, 68, 0.95)\",\n\t\tlineHeight: 18,\n\t},\n\tactions: {\n\t\tflexDirection: \"row\",\n\t\tmarginTop: 6,\n\t\tgap: 4,\n\t},\n\tactionBtn: {\n\t\tpadding: 6,\n\t\tborderRadius: 8,\n\t},\n\tactionBtnDisabled: {\n\t\topacity: 0.45,\n\t},\n});\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * Progressively reveals `targetText` char-by-char, matching the demo's\n * typing-loop feel for both thinking content and the final response.\n *\n * - While `enabled` is true the hook keeps a \"displayed\" buffer and\n * advances it toward the current `targetText` one character at a time.\n * - If new text is appended to `targetText` mid-animation, the loop\n * picks up from where it left off.\n * - When `enabled` becomes false the remaining text is flushed instantly\n * (e.g. when thinking ends and we auto-collapse).\n */\n\ntype SpeedProfile = {\n\tnormal: [number, number];\n\tfast: number;\n\tpunctuation: [number, number];\n\tnewline: [number, number];\n\tidle: number;\n};\n\nexport const THINKING_SPEED: SpeedProfile = {\n\tnormal: [6, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [12, 18],\n\tidle: 30,\n};\n\nexport const RESPONSE_SPEED: SpeedProfile = {\n\tnormal: [4, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [10, 15],\n\tidle: 30,\n};\n\nfunction charDelay(char: string, speed: SpeedProfile): number {\n\tif (char === \"*\") return speed.fast;\n\tif (char === \"\\n\") return speed.newline[0] + Math.random() * speed.newline[1];\n\tif (\".!?,;:\".includes(char))\n\t\treturn speed.punctuation[0] + Math.random() * speed.punctuation[1];\n\treturn speed.normal[0] + Math.random() * speed.normal[1];\n}\n\n// Matches any markdown image token: \n// When the cursor lands on the `!`, the entire token is consumed instantly\n// so image syntax is never rendered character-by-character as raw text.\nconst MARKDOWN_IMAGE_REGEX = /^!\\[[^\\]]*\\]\\([^)]*\\)/;\n\n// Module-level cache of the typing progress keyed by the caller-provided\n// `cacheKey`. Survives component unmount/remount so that switching away from\n// an in-flight streaming message and returning to it doesn't restart the\n// typing animation from zero.\nconst typingProgressCache = new Map<string, string>();\n\nexport function useTypingEffect(\n\ttargetText: string,\n\tenabled: boolean,\n\tspeed: SpeedProfile = RESPONSE_SPEED,\n\tinitialDisplayedText?: string,\n\tcacheKey?: string,\n): { displayedText: string; isTyping: boolean } {\n\tconst cached = cacheKey ? typingProgressCache.get(cacheKey) : undefined;\n\tconst hydratedFromCache =\n\t\tcached !== undefined && targetText.startsWith(cached) ? cached : undefined;\n\n\tconst [displayedText, setDisplayedText] = useState(hydratedFromCache ?? \"\");\n\tconst displayedRef = useRef(hydratedFromCache ?? \"\");\n\tconst targetRef = useRef(targetText);\n\tconst enabledRef = useRef(enabled);\n\tconst initialDisplayedRef = useRef(initialDisplayedText);\n\tconst cacheKeyRef = useRef(cacheKey);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst runningRef = useRef(false);\n\n\ttargetRef.current = targetText;\n\tenabledRef.current = enabled;\n\tinitialDisplayedRef.current = initialDisplayedText;\n\tcacheKeyRef.current = cacheKey;\n\n\tconst writeDisplayed = (next: string) => {\n\t\tdisplayedRef.current = next;\n\t\tsetDisplayedText(next);\n\t\tif (cacheKeyRef.current) {\n\t\t\ttypingProgressCache.set(cacheKeyRef.current, next);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t\tdisplayedRef.current = targetText;\n\t\t\tsetDisplayedText(targetText);\n\t\t\tif (cacheKeyRef.current) {\n\t\t\t\t// Typing finished / disabled: drop the cache entry so future\n\t\t\t\t// messages with a recycled key don't inherit stale progress.\n\t\t\t\ttypingProgressCache.delete(cacheKeyRef.current);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// When re-enabled after a flush (e.g. content changed while disabled),\n\t\t// reset if the previously displayed text is no longer a prefix of the\n\t\t// new target — otherwise the loop continues from a stale position.\n\t\tif (displayedRef.current && !targetRef.current.startsWith(displayedRef.current)) {\n\t\t\tdisplayedRef.current = \"\";\n\t\t\tsetDisplayedText(\"\");\n\t\t\tif (cacheKeyRef.current) typingProgressCache.delete(cacheKeyRef.current);\n\t\t}\n\n\t\tif (\n\t\t\tdisplayedRef.current.length === 0 &&\n\t\t\tinitialDisplayedRef.current &&\n\t\t\ttargetRef.current.startsWith(initialDisplayedRef.current)\n\t\t) {\n\t\t\twriteDisplayed(initialDisplayedRef.current);\n\t\t}\n\n\t\tif (runningRef.current) return;\n\t\trunningRef.current = true;\n\n\t\tconst tick = () => {\n\t\t\tif (!enabledRef.current) {\n\t\t\t\trunningRef.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Detect stale position: an image URL was swapped (RAG → resolved blob)\n\t\t\t// while typing was in-flight, shifting all character offsets after\n\t\t\t// the image. Re-anchor by computing the length delta between the old\n\t\t\t// and new image tokens and adjusting the cursor accordingly so the\n\t\t\t// text that was already typed doesn't have to be re-typed.\n\t\t\tif (displayedRef.current && !targetRef.current.startsWith(displayedRef.current)) {\n\t\t\t\tlet divergeAt = 0;\n\t\t\t\tconst minLen = Math.min(displayedRef.current.length, targetRef.current.length);\n\t\t\t\twhile (divergeAt < minLen && displayedRef.current[divergeAt] === targetRef.current[divergeAt]) {\n\t\t\t\t\tdivergeAt++;\n\t\t\t\t}\n\n\t\t\t\t// Find the `![` that owns the divergence (the image whose URL changed).\n\t\t\t\tconst imgStart = targetRef.current.slice(0, divergeAt).lastIndexOf(\"![\");\n\n\t\t\t\tif (imgStart >= 0) {\n\t\t\t\t\tconst newImgMatch = MARKDOWN_IMAGE_REGEX.exec(targetRef.current.slice(imgStart));\n\t\t\t\t\tconst oldImgMatch = MARKDOWN_IMAGE_REGEX.exec(displayedRef.current.slice(imgStart));\n\n\t\t\t\t\tif (newImgMatch && oldImgMatch) {\n\t\t\t\t\t\t// Shift cursor by the URL length delta so no text is re-typed.\n\t\t\t\t\t\tconst oldImgEnd = imgStart + oldImgMatch[0].length;\n\t\t\t\t\t\tconst newImgEnd = imgStart + newImgMatch[0].length;\n\t\t\t\t\t\tconst newCursor = Math.min(\n\t\t\t\t\t\t\tMath.max(displayedRef.current.length + (newImgEnd - oldImgEnd), newImgEnd),\n\t\t\t\t\t\t\ttargetRef.current.length,\n\t\t\t\t\t\t);\n\t\t\t\t\t\twriteDisplayed(targetRef.current.slice(0, newCursor));\n\t\t\t\t\t\ttimerRef.current = setTimeout(tick, 0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fallback: reset to just before the image so the skip regex handles it.\n\t\t\t\twriteDisplayed(targetRef.current.slice(0, imgStart >= 0 ? imgStart : divergeAt));\n\t\t\t\ttimerRef.current = setTimeout(tick, 0);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (displayedRef.current.length < targetRef.current.length) {\n\t\t\t\tconst remaining = targetRef.current.slice(displayedRef.current.length);\n\n\t\t\t\t// Skip any markdown image token `` in one step so the\n\t\t\t\t// raw syntax never appears as typed text — regardless of whether\n\t\t\t\t// the URL is still a RAG path or already a resolved blob URL.\n\t\t\t\tconst imgMatch = MARKDOWN_IMAGE_REGEX.exec(remaining);\n\t\t\t\tif (imgMatch) {\n\t\t\t\t\twriteDisplayed(displayedRef.current + imgMatch[0]);\n\t\t\t\t\ttimerRef.current = setTimeout(tick, 0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst nextChar = remaining[0];\n\t\t\t\twriteDisplayed(displayedRef.current + nextChar);\n\t\t\t\tconst delay = charDelay(nextChar, speed);\n\t\t\t\ttimerRef.current = setTimeout(tick, delay);\n\t\t\t} else {\n\t\t\t\ttimerRef.current = setTimeout(tick, speed.idle);\n\t\t\t}\n\t\t};\n\n\t\ttick();\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [enabled]);\n\n\tconst isTyping =\n\t\tenabled && displayedRef.current.length < targetRef.current.length;\n\n\treturn {\n\t\tdisplayedText: enabled ? displayedText : targetText,\n\t\tisTyping,\n\t};\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\tAnimated,\n\tClipboard,\n\tEasing,\n\tLayoutAnimation,\n\tPlatform,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tUIManager,\n\tView,\n} from \"react-native\";\nimport Markdown from \"react-native-markdown-display\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tChevronRight,\n\tCopy,\n\tWifiOff,\n} from \"lucide-react-native\";\nimport { buildFormattedThinking } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { useTypingEffect, RESPONSE_SPEED, THINKING_SPEED } from \"./useTypingEffect\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\n\n// ── Web parity constants ────────────────────────────────────────────────────\n// Mirrors ThinkingBlockV2 on web. Keep in sync if/when web changes.\nconst CURSOR_MESSAGES = [\n\t\"Analyzing\", \"Processing\", \"Calculating\", \"Reviewing\", \"Verifying\",\n\t\"Assessing\", \"Evaluating\", \"Checking\", \"Planning\", \"Working\",\n\t\"Updating\", \"Validating\", \"Monitoring\", \"Optimizing\", \"Reconciling\",\n\t\"Forecasting\", \"Inspecting\", \"Organizing\", \"Sorting\", \"Scanning\",\n\t\"Balancing\", \"Summarizing\", \"Predicting\", \"Comparing\", \"Tracking\",\n\t\"Adjusting\", \"Examining\", \"Mapping\", \"Modeling\", \"Reporting\",\n\t\"Confirming\",\n] as const;\nconst FINAL_CURSOR_MESSAGE = \"Finishing up\";\nconst INITIAL_THINKING_PLACEHOLDER = [\n\t\"**Getting things ready**\",\n\t\"Putting things together\",\n].join(\"\\n\");\n\nconst PAYMAN_TEAL = \"#00858d\";\nconst TEXT_PRIMARY = \"#0f172a\";\nconst TEXT_SECONDARY = \"#475569\";\nconst TEXT_TERTIARY = \"#94a3b8\";\nconst TEXT_MUTED = \"#cbd5e1\";\n\n// Enable LayoutAnimation on Android (no-op on iOS).\nif (\n\tPlatform.OS === \"android\" &&\n\tUIManager.setLayoutAnimationEnabledExperimental\n) {\n\tUIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\n// ─── PaymanMark (native) ─────────────────────────────────────────────────────\n// Lightweight stand-in for the web SVG morph: a teal dot with a pulsing ring.\n\nfunction PaymanMarkNative({ size = 14 }: { size?: number }) {\n\tconst scale = useRef(new Animated.Value(0.7)).current;\n\tconst opacity = useRef(new Animated.Value(0.6)).current;\n\n\tuseEffect(() => {\n\t\tconst loop = Animated.loop(\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.sequence([\n\t\t\t\t\tAnimated.timing(scale, {\n\t\t\t\t\t\ttoValue: 1.6,\n\t\t\t\t\t\tduration: 1100,\n\t\t\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t\tAnimated.timing(scale, {\n\t\t\t\t\t\ttoValue: 0.7,\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t]),\n\t\t\t\tAnimated.sequence([\n\t\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\t\ttoValue: 0,\n\t\t\t\t\t\tduration: 1100,\n\t\t\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\t\ttoValue: 0.55,\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t]),\n\t\t\t]),\n\t\t);\n\t\tloop.start();\n\t\treturn () => loop.stop();\n\t}, [scale, opacity]);\n\n\treturn (\n\t\t<View style={[mark.wrap, { width: size, height: size }]}>\n\t\t\t<Animated.View\n\t\t\t\tstyle={[\n\t\t\t\t\tmark.ring,\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: size,\n\t\t\t\t\t\theight: size,\n\t\t\t\t\t\tborderRadius: size / 2,\n\t\t\t\t\t\ttransform: [{ scale }],\n\t\t\t\t\t\topacity,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t\t<View\n\t\t\t\tstyle={[\n\t\t\t\t\tmark.core,\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: size * 0.55,\n\t\t\t\t\t\theight: size * 0.55,\n\t\t\t\t\t\tborderRadius: size * 0.55,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t</View>\n\t);\n}\n\n// ─── ShimmerText ─────────────────────────────────────────────────────────────\n// Subtle opacity pulse to mimic the web shimmer-text feel.\n\nfunction ShimmerText({\n\tchildren,\n\tstyle,\n}: {\n\tchildren: React.ReactNode;\n\tstyle?: React.ComponentProps<typeof Text>[\"style\"];\n}) {\n\tconst opacity = useRef(new Animated.Value(0.5)).current;\n\n\tuseEffect(() => {\n\t\tconst anim = Animated.loop(\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tduration: 900,\n\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\ttoValue: 0.5,\n\t\t\t\t\tduration: 900,\n\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t]),\n\t\t);\n\t\tanim.start();\n\t\treturn () => anim.stop();\n\t}, [opacity]);\n\n\treturn (\n\t\t<Animated.Text style={[style, { opacity }]} selectable={false}>\n\t\t\t{children}\n\t\t</Animated.Text>\n\t);\n}\n\n// ─── Animated seconds (fade slide between values) ────────────────────────────\n\nfunction AnimatedSeconds({ value, style }: { value: number; style?: React.ComponentProps<typeof Text>[\"style\"] }) {\n\tconst prevRef = useRef(value);\n\tconst opacity = useRef(new Animated.Value(1)).current;\n\tconst translate = useRef(new Animated.Value(0)).current;\n\tconst [shown, setShown] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (value === prevRef.current) return;\n\t\tprevRef.current = value;\n\t\tAnimated.sequence([\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.timing(opacity, { toValue: 0, duration: 90, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(translate, { toValue: -4, duration: 90, useNativeDriver: true }),\n\t\t\t]),\n\t\t]).start(() => {\n\t\t\tsetShown(value);\n\t\t\ttranslate.setValue(4);\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.timing(opacity, { toValue: 1, duration: 140, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(translate, { toValue: 0, duration: 140, useNativeDriver: true }),\n\t\t\t]).start();\n\t\t});\n\t}, [value, opacity, translate]);\n\n\treturn (\n\t\t<Animated.Text style={[style, { opacity, transform: [{ translateY: translate }] }]} selectable={false}>\n\t\t\t{formatDuration(shown)}\n\t\t</Animated.Text>\n\t);\n}\n\nfunction formatDuration(seconds: number): string {\n\tif (seconds < 60) return `${seconds}s`;\n\tconst m = Math.floor(seconds / 60);\n\tconst s = seconds % 60;\n\treturn s > 0 ? `${m}m ${s}s` : `${m}m`;\n}\n\n// ─── Thinking content parser ─────────────────────────────────────────────────\n\ntype ThinkingLine =\n\t| { type: \"statement\"; text: string }\n\t| { type: \"detail\"; text: string }\n\t| { type: \"status\"; variant: \"success\" | \"error\"; text: string };\n\nfunction parseThinking(content: string): ThinkingLine[] {\n\tconst lines = content.split(\"\\n\");\n\tconst out: ThinkingLine[] = [];\n\tfor (const raw of lines) {\n\t\tconst line = raw.trim();\n\t\tif (!line) continue;\n\t\tconst stmt = line.match(/^\\*\\*(.+)\\*\\*$/);\n\t\tif (stmt) {\n\t\t\tout.push({ type: \"statement\", text: stmt[1].trim() });\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✓ \")) {\n\t\t\tout.push({ type: \"status\", variant: \"success\", text: line.slice(2).trim() });\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✗ \")) {\n\t\t\tout.push({ type: \"status\", variant: \"error\", text: line.slice(2).trim() });\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({ type: \"detail\", text: line });\n\t}\n\treturn out;\n}\n\n// ─── ThinkingBlock (collapsible) ─────────────────────────────────────────────\n\nfunction ThinkingBlock({\n\tcontent,\n\tisStreaming,\n\tdurationSec,\n\tstartedAt,\n}: {\n\tcontent: string;\n\tisStreaming: boolean;\n\tdurationSec?: number;\n\tstartedAt?: number;\n}) {\n\tconst [open, setOpen] = useState(true);\n\tconst [cursorIdx, setCursorIdx] = useState(0);\n\tconst [elapsedSec, setElapsedSec] = useState(() =>\n\t\tisStreaming && startedAt\n\t\t\t? Math.max(0, Math.floor((Date.now() - startedAt) / 1000))\n\t\t\t: 0,\n\t);\n\tconst elapsedSecRef = useRef(elapsedSec);\n\tconst frozenSecRef = useRef<number | null>(null);\n\tconst prevStreaming = useRef(isStreaming);\n\tconst chevronRot = useRef(new Animated.Value(open ? 1 : 0)).current;\n\n\tconst parsed = useMemo(() => parseThinking(content), [content]);\n\n\tconst isFinalizingPhase = useMemo(() => {\n\t\tconst statements = parsed.filter(\n\t\t\t(l): l is Extract<ThinkingLine, { type: \"statement\" }> => l.type === \"statement\",\n\t\t);\n\t\treturn (\n\t\t\tstatements.length > 0 &&\n\t\t\tstatements[statements.length - 1].text === \"Finalizing\"\n\t\t);\n\t}, [parsed]);\n\n\tuseEffect(() => {\n\t\tif (prevStreaming.current && !isStreaming) {\n\t\t\tLayoutAnimation.configureNext({\n\t\t\t\tduration: 220,\n\t\t\t\tcreate: { type: \"easeInEaseOut\", property: \"opacity\" },\n\t\t\t\tupdate: { type: \"easeInEaseOut\" },\n\t\t\t\tdelete: { type: \"easeInEaseOut\", property: \"opacity\" },\n\t\t\t});\n\t\t\tsetOpen(false);\n\t\t\tfrozenSecRef.current = elapsedSecRef.current;\n\t\t}\n\t\tprevStreaming.current = isStreaming;\n\t}, [isStreaming]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || !startedAt) return;\n\t\tlet active = true;\n\t\tconst tick = () => {\n\t\t\tif (!active) return;\n\t\t\tconst val = Math.max(0, Math.floor((Date.now() - startedAt) / 1000));\n\t\t\telapsedSecRef.current = val;\n\t\t\tsetElapsedSec(val);\n\t\t};\n\t\ttick();\n\t\tconst id = setInterval(tick, 1000);\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\tclearInterval(id);\n\t\t};\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || isFinalizingPhase) return;\n\t\tconst id = setInterval(() => {\n\t\t\tsetCursorIdx((i) => (i + 1) % CURSOR_MESSAGES.length);\n\t\t}, 4000);\n\t\treturn () => clearInterval(id);\n\t}, [isStreaming, isFinalizingPhase]);\n\n\tuseEffect(() => {\n\t\tAnimated.timing(chevronRot, {\n\t\t\ttoValue: open ? 1 : 0,\n\t\t\tduration: 180,\n\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\tuseNativeDriver: true,\n\t\t}).start();\n\t}, [open, chevronRot]);\n\n\tconst justStoppedSec =\n\t\t!isStreaming && prevStreaming.current && startedAt\n\t\t\t? Math.max(0, Math.floor((Date.now() - startedAt) / 1000))\n\t\t\t: undefined;\n\tconst finalSec = (() => {\n\t\tconst candidates = [\n\t\t\tfrozenSecRef.current,\n\t\t\tjustStoppedSec,\n\t\t\tfrozenSecRef.current == null && !prevStreaming.current ? durationSec : undefined,\n\t\t].filter((v): v is number => typeof v === \"number\" && Number.isFinite(v));\n\t\treturn candidates.length ? Math.max(...candidates) : undefined;\n\t})();\n\n\tconst cursorText = isFinalizingPhase ? FINAL_CURSOR_MESSAGE : CURSOR_MESSAGES[cursorIdx];\n\n\tconst toggle = useCallback(() => {\n\t\tLayoutAnimation.configureNext({\n\t\t\tduration: 200,\n\t\t\tcreate: { type: \"easeInEaseOut\", property: \"opacity\" },\n\t\t\tupdate: { type: \"easeInEaseOut\" },\n\t\t\tdelete: { type: \"easeInEaseOut\", property: \"opacity\" },\n\t\t});\n\t\tsetOpen((o) => !o);\n\t}, []);\n\n\treturn (\n\t\t<View style={ts.container}>\n\t\t\t<Pressable style={ts.header} onPress={toggle} hitSlop={6}>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttransform: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\trotate: chevronRot.interpolate({\n\t\t\t\t\t\t\t\t\tinputRange: [0, 1],\n\t\t\t\t\t\t\t\t\toutputRange: [\"0deg\", \"90deg\"],\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<ChevronRight size={14} color={TEXT_TERTIARY} strokeWidth={2.25} />\n\t\t\t\t</Animated.View>\n\n\t\t\t\t{isStreaming ? (\n\t\t\t\t\t<View style={ts.headerLabelRow}>\n\t\t\t\t\t\t<ShimmerText style={ts.headerLabel}>Working on it…</ShimmerText>\n\t\t\t\t\t\t{startedAt !== undefined ? (\n\t\t\t\t\t\t\t<AnimatedSeconds value={elapsedSec} style={ts.timerText} />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</View>\n\t\t\t\t) : finalSec != null && finalSec > 0 ? (\n\t\t\t\t\t<View style={ts.headerLabelRow}>\n\t\t\t\t\t\t<Text style={ts.headerLabelStatic}>Thought for </Text>\n\t\t\t\t\t\t<AnimatedSeconds value={finalSec} style={ts.headerLabelStatic} />\n\t\t\t\t\t</View>\n\t\t\t\t) : (\n\t\t\t\t\t<Text style={ts.headerLabelStatic}>Thought</Text>\n\t\t\t\t)}\n\t\t\t</Pressable>\n\n\t\t\t{open ? (\n\t\t\t\t<View style={ts.body}>\n\t\t\t\t\t{parsed.map((item, i) => {\n\t\t\t\t\t\tif (item.type === \"statement\") {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Text key={i} style={ts.statement}>\n\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.type === \"status\") {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<View\n\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\tts.statusBadge,\n\t\t\t\t\t\t\t\t\t\titem.variant === \"success\" ? ts.statusSuccessBg : ts.statusErrorBg,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\tts.statusBadgeText,\n\t\t\t\t\t\t\t\t\t\t\titem.variant === \"success\" ? ts.statusSuccessText : ts.statusErrorText,\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Text key={i} style={ts.detail}>\n\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\n\t\t\t\t\t{isStreaming ? (\n\t\t\t\t\t\t<View style={ts.cursorRow}>\n\t\t\t\t\t\t\t<PaymanMarkNative size={14} />\n\t\t\t\t\t\t\t<ShimmerText style={ts.cursorLabel}>{cursorText}</ShimmerText>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t) : null}\n\t\t</View>\n\t);\n}\n\n// ─── Streaming dot (trailing while content streams) ──────────────────────────\n\nfunction StreamingDot() {\n\tconst opacity = useRef(new Animated.Value(0.3)).current;\n\tuseEffect(() => {\n\t\tconst anim = Animated.loop(\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(opacity, { toValue: 1, duration: 700, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n\t\t\t\tAnimated.timing(opacity, { toValue: 0.3, duration: 700, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n\t\t\t]),\n\t\t);\n\t\tanim.start();\n\t\treturn () => anim.stop();\n\t}, [opacity]);\n\treturn <Animated.View style={[dotStyle.dot, { opacity }]} />;\n}\n\n// ─── Main component ──────────────────────────────────────────────────────────\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\tactions?: AssistantMessageActionsConfig;\n};\n\nfunction getFormattedThinking(\n\tmessage: MessageDisplay,\n\tincludeInitialPlaceholder: boolean,\n): string {\n\tconst plain = message.allThinkingText || message.activeThinkingText || \"\";\n\tconst base =\n\t\tmessage.formattedThinkingText || buildFormattedThinking(message.steps, plain);\n\tif (includeInitialPlaceholder && base) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER + \"\\n\" + base;\n\t}\n\tif (includeInitialPlaceholder) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER;\n\t}\n\treturn base;\n}\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonExecutionTraceClick: _onExecutionTraceClick,\n\tactions,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\n\tconst isHistorical = !!message.isHistorical;\n\tconst hasEverStreamed = useRef(!!message.isStreaming && !isHistorical);\n\tconst hasShownInitialThinking = useRef(\n\t\t!isHistorical && message.streamProgress === \"processing\",\n\t);\n\tif (message.isStreaming && !isHistorical) hasEverStreamed.current = true;\n\n\tconst fadeIn = useRef(new Animated.Value(0)).current;\n\tuseEffect(() => {\n\t\tAnimated.timing(fadeIn, {\n\t\t\ttoValue: 1,\n\t\t\tduration: 220,\n\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\tuseNativeDriver: true,\n\t\t}).start();\n\t}, [fadeIn]);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw =\n\t\t\tmessage.isStreaming && !isHistorical\n\t\t\t\t? message.streamingContent || message.content\n\t\t\t\t: message.content;\n\t\tif (!raw) return \"\";\n\t\treturn raw.replace(/\\\\n/g, \"\\n\");\n\t})();\n\n\tconst hasReadyStreamPhase =\n\t\t!isHistorical &&\n\t\t(message.streamProgress === \"processing\" ||\n\t\t\tBoolean(message.steps?.length) ||\n\t\t\tBoolean(message.allThinkingText) ||\n\t\t\tBoolean(message.activeThinkingText) ||\n\t\t\tBoolean(rawResponseContent));\n\n\tif (hasReadyStreamPhase && !message.isError) {\n\t\thasShownInitialThinking.current = true;\n\t}\n\n\tconst includeInitialPlaceholder =\n\t\t!isHistorical && hasShownInitialThinking.current && !message.isError;\n\n\tconst rawThinkingContent = useMemo(\n\t\t() => getFormattedThinking(message, includeInitialPlaceholder),\n\t\t[message, includeInitialPlaceholder],\n\t);\n\n\tconst isThinkingStreaming =\n\t\t!isHistorical &&\n\t\t!!message.isStreaming &&\n\t\t!rawResponseContent &&\n\t\t!message.isError;\n\n\tconst { displayedText: thinkingContent } = useTypingEffect(\n\t\trawThinkingContent,\n\t\thasEverStreamed.current && isThinkingStreaming,\n\t\tTHINKING_SPEED,\n\t\tincludeInitialPlaceholder ? INITIAL_THINKING_PLACEHOLDER : undefined,\n\t\t`thinking:${message.id}`,\n\t);\n\tconst hasThinkingContent = Boolean(thinkingContent);\n\tconst showThinkingBlock =\n\t\t!isHistorical && (hasThinkingContent || isThinkingStreaming);\n\tconst showLegacyThinkingPhase =\n\t\t!isHistorical &&\n\t\t!!message.isStreaming &&\n\t\t!message.isError &&\n\t\t!rawResponseContent &&\n\t\tmessage.streamProgress === \"started\";\n\n\tconst responseTypingEnabled =\n\t\t!isHistorical &&\n\t\thasEverStreamed.current &&\n\t\tBoolean(rawResponseContent) &&\n\t\t!message.isError;\n\n\tconst { displayedText: displayContent, isTyping: isResponseTyping } =\n\t\tuseTypingEffect(\n\t\t\trawResponseContent,\n\t\t\tresponseTypingEnabled,\n\t\t\tRESPONSE_SPEED,\n\t\t\tundefined,\n\t\t\t`response:${message.id}`,\n\t\t);\n\n\tconst requestStartedAt = useMemo(() => {\n\t\tif (!message.timestamp) return undefined;\n\t\tconst t = Date.parse(message.timestamp);\n\t\treturn Number.isFinite(t) ? t : undefined;\n\t}, [message.timestamp]);\n\n\tconst thinkingDuration = useMemo(() => {\n\t\tconst steps = message.steps;\n\t\tif (!steps || steps.length === 0) return undefined;\n\t\tconst last = steps[steps.length - 1];\n\t\tif (requestStartedAt && last.timestamp) {\n\t\t\treturn Math.max(0, Math.round((last.timestamp - requestStartedAt) / 1000));\n\t\t}\n\t\tconst first = steps[0];\n\t\tif (first.timestamp && last.timestamp) {\n\t\t\treturn Math.round((last.timestamp - first.timestamp) / 1000);\n\t\t}\n\t\tconst total = steps.reduce((sum, s) => sum + (s.elapsedMs || 0), 0);\n\t\treturn total > 0 ? Math.round(total / 1000) : undefined;\n\t}, [message.steps, requestStartedAt]);\n\n\tconst handleCopy = useCallback(() => {\n\t\tClipboard.setString(displayContent);\n\t\tsetCopied(true);\n\t\tif (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n\t\tcopyTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t}, [displayContent]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n\t\t};\n\t}, []);\n\n\t// ── Error resolution ─────────────────────────────────────────────────────\n\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isConflictError = Boolean(conflictErrorMessage);\n\n\tconst resolvedErrorText = (() => {\n\t\tif (conflictErrorMessage) return conflictErrorMessage;\n\t\tif (isFriendlyWorkflowError(message.errorDetails) && !message.errorDetails) {\n\t\t\treturn \"Oops, something went wrong. Please try again.\";\n\t\t}\n\t\treturn message.errorDetails;\n\t})();\n\n\tif (isConflictError) {\n\t\treturn (\n\t\t\t<Animated.View style={[s.wrapper, { opacity: fadeIn }]}>\n\t\t\t\t<View style={s.errorRow}>\n\t\t\t\t\t<AlertCircle size={15} color=\"#ef4444\" strokeWidth={2} />\n\t\t\t\t\t<Text selectable style={s.errorText}>\n\t\t\t\t\t\t{conflictErrorMessage}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</Animated.View>\n\t\t);\n\t}\n\n\tif (message.isError && !displayContent && !hasThinkingContent) {\n\t\treturn (\n\t\t\t<Animated.View style={[s.wrapper, { opacity: fadeIn }]}>\n\t\t\t\t<View style={s.errorRow}>\n\t\t\t\t\t<AlertCircle size={15} color=\"#ef4444\" strokeWidth={2} />\n\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t<Text selectable style={s.errorText}>\n\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t</Animated.View>\n\t\t);\n\t}\n\n\tif (showLegacyThinkingPhase && !showThinkingBlock) {\n\t\treturn (\n\t\t\t<Animated.View style={[s.wrapper, { opacity: fadeIn }]}>\n\t\t\t\t<ShimmerText style={s.legacyThinking}>Working on it…</ShimmerText>\n\t\t\t</Animated.View>\n\t\t);\n\t}\n\n\tconst hasPartialError = message.isError && displayContent && !isConflictError;\n\tconst isCancelled = message.isCancelled;\n\tconst isDone =\n\t\t!message.isStreaming && displayContent && !hasPartialError && !isResponseTyping;\n\n\treturn (\n\t\t<Animated.View style={[s.wrapper, { opacity: fadeIn }]}>\n\t\t\t{showThinkingBlock ? (\n\t\t\t\t<ThinkingBlock\n\t\t\t\t\tcontent={thinkingContent}\n\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\tdurationSec={message.thinkingDurationSec ?? thinkingDuration}\n\t\t\t\t\tstartedAt={requestStartedAt}\n\t\t\t\t/>\n\t\t\t) : null}\n\n\t\t\t{displayContent ? (\n\t\t\t\tisResponseTyping ? (\n\t\t\t\t\t<Text selectable style={s.plainText}>\n\t\t\t\t\t\t{displayContent}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<Markdown style={mdStyles}>{displayContent}</Markdown>\n\t\t\t\t)\n\t\t\t) : !isThinkingStreaming && !hasThinkingContent ? (\n\t\t\t\t<Text style={s.placeholder}>…</Text>\n\t\t\t) : null}\n\n\t\t\t{isCancelled && message.isStreaming ? (\n\t\t\t\t<View style={s.pausedRow}>\n\t\t\t\t\t<WifiOff size={14} color=\"rgba(217, 119, 6, 0.85)\" strokeWidth={2} />\n\t\t\t\t\t<Text style={s.pausedText}>Connection slow — resuming…</Text>\n\t\t\t\t</View>\n\t\t\t) : null}\n\n\t\t\t{hasPartialError ? (\n\t\t\t\t<View style={s.errorRow}>\n\t\t\t\t\t<AlertCircle size={15} color=\"#ef4444\" strokeWidth={2} />\n\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t<Text selectable style={s.errorText}>\n\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t) : null}\n\n\t\t\t{message.isStreaming && displayContent && !isCancelled ? (\n\t\t\t\t<StreamingDot />\n\t\t\t) : null}\n\n\t\t\t{isDone && showCopyAction ? (\n\t\t\t\t<View style={s.actions}>\n\t\t\t\t\t<Pressable onPress={handleCopy} hitSlop={8} style={s.actionBtn}>\n\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t<Check size={14} color=\"#059669\" strokeWidth={2.5} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Copy size={14} color={TEXT_TERTIARY} strokeWidth={2} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Pressable>\n\t\t\t\t</View>\n\t\t\t) : null}\n\t\t</Animated.View>\n\t);\n}\n\n// ─── Styles ──────────────────────────────────────────────────────────────────\n\nconst s = StyleSheet.create({\n\twrapper: {\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 6,\n\t\talignItems: \"flex-start\",\n\t},\n\tplainText: {\n\t\tfontSize: 15,\n\t\tlineHeight: 23,\n\t\tcolor: TEXT_PRIMARY,\n\t},\n\tplaceholder: {\n\t\tfontSize: 14,\n\t\tcolor: TEXT_MUTED,\n\t},\n\tlegacyThinking: {\n\t\tfontSize: 14,\n\t\tcolor: TEXT_SECONDARY,\n\t\tfontStyle: \"italic\",\n\t},\n\terrorRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"flex-start\",\n\t\tgap: 8,\n\t\tmarginTop: 4,\n\t},\n\terrorText: {\n\t\tflex: 1,\n\t\tfontSize: 14,\n\t\tcolor: \"#ef4444\",\n\t\tlineHeight: 20,\n\t},\n\tpausedRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 6,\n\t\tmarginTop: 6,\n\t},\n\tpausedText: {\n\t\tfontSize: 13,\n\t\tcolor: \"rgba(217, 119, 6, 0.95)\",\n\t},\n\tactions: {\n\t\tflexDirection: \"row\",\n\t\tmarginTop: 6,\n\t\tgap: 4,\n\t},\n\tactionBtn: {\n\t\tpadding: 6,\n\t\tborderRadius: 8,\n\t},\n});\n\nconst ts = StyleSheet.create({\n\tcontainer: {\n\t\tmarginBottom: 8,\n\t\tpaddingLeft: 4,\n\t\talignSelf: \"stretch\",\n\t},\n\theader: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 8,\n\t\tpaddingVertical: 4,\n\t},\n\theaderLabelRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\theaderLabel: {\n\t\tfontSize: 13,\n\t\tcolor: TEXT_SECONDARY,\n\t\tfontWeight: \"500\",\n\t},\n\theaderLabelStatic: {\n\t\tfontSize: 13,\n\t\tcolor: TEXT_SECONDARY,\n\t\tfontWeight: \"500\",\n\t},\n\ttimerText: {\n\t\tfontSize: 13,\n\t\tcolor: TEXT_TERTIARY,\n\t\tmarginLeft: 6,\n\t\tfontVariant: [\"tabular-nums\"],\n\t},\n\tbody: {\n\t\tmarginTop: 6,\n\t\tmarginLeft: 22,\n\t\tpaddingLeft: 12,\n\t\tborderLeftWidth: 2,\n\t\tborderLeftColor: \"rgba(0,133,141,0.15)\",\n\t\tgap: 4,\n\t},\n\tstatement: {\n\t\tfontSize: 13,\n\t\tfontWeight: \"500\",\n\t\tcolor: TEXT_PRIMARY,\n\t\tmarginTop: 4,\n\t},\n\tdetail: {\n\t\tfontSize: 13,\n\t\tcolor: TEXT_SECONDARY,\n\t\tlineHeight: 20,\n\t},\n\tstatusBadge: {\n\t\talignSelf: \"flex-start\",\n\t\tborderRadius: 999,\n\t\tpaddingHorizontal: 10,\n\t\tpaddingVertical: 3,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tmarginTop: 2,\n\t},\n\tstatusBadgeText: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t},\n\tstatusSuccessBg: {\n\t\tbackgroundColor: \"rgba(5,150,105,0.06)\",\n\t\tborderColor: \"rgba(5,150,105,0.18)\",\n\t},\n\tstatusSuccessText: { color: \"#059669\" },\n\tstatusErrorBg: {\n\t\tbackgroundColor: \"rgba(239,68,68,0.06)\",\n\t\tborderColor: \"rgba(239,68,68,0.18)\",\n\t},\n\tstatusErrorText: { color: \"#ef4444\" },\n\tcursorRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 8,\n\t\tmarginTop: 4,\n\t\tminHeight: 18,\n\t},\n\tcursorLabel: {\n\t\tfontSize: 13,\n\t\tcolor: TEXT_SECONDARY,\n\t},\n});\n\nconst dotStyle = StyleSheet.create({\n\tdot: {\n\t\twidth: 7,\n\t\theight: 7,\n\t\tborderRadius: 4,\n\t\tbackgroundColor: PAYMAN_TEAL,\n\t\tmarginTop: 6,\n\t},\n});\n\nconst mark = StyleSheet.create({\n\twrap: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tposition: \"relative\",\n\t},\n\tring: {\n\t\tposition: \"absolute\",\n\t\tborderWidth: 1.5,\n\t\tborderColor: PAYMAN_TEAL,\n\t\tbackgroundColor: \"transparent\",\n\t},\n\tcore: {\n\t\tbackgroundColor: PAYMAN_TEAL,\n\t},\n});\n\nconst mdStyles = StyleSheet.create({\n\tbody: {\n\t\tfontSize: 15,\n\t\tlineHeight: 23,\n\t\tcolor: TEXT_PRIMARY,\n\t},\n\theading1: { fontSize: 20, fontWeight: \"700\", color: TEXT_PRIMARY, marginTop: 12, marginBottom: 4 },\n\theading2: { fontSize: 17, fontWeight: \"700\", color: TEXT_PRIMARY, marginTop: 10, marginBottom: 4 },\n\theading3: { fontSize: 15, fontWeight: \"600\", color: TEXT_PRIMARY, marginTop: 8, marginBottom: 2 },\n\tstrong: { fontWeight: \"700\" },\n\tem: { fontStyle: \"italic\" },\n\tcode_inline: {\n\t\tfontFamily: Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\",\n\t\tfontSize: 13,\n\t\tbackgroundColor: \"rgba(15,23,42,0.06)\",\n\t\tborderRadius: 4,\n\t\tpaddingHorizontal: 4,\n\t\tcolor: TEXT_PRIMARY,\n\t},\n\tfence: {\n\t\tbackgroundColor: \"rgba(15,23,42,0.05)\",\n\t\tborderRadius: 8,\n\t\tpadding: 12,\n\t\tmarginVertical: 6,\n\t\tfontFamily: Platform.OS === \"ios\" ? \"Menlo\" : \"monospace\",\n\t\tfontSize: 13,\n\t\tcolor: TEXT_PRIMARY,\n\t},\n\tblockquote: {\n\t\tborderLeftWidth: 3,\n\t\tborderLeftColor: \"#cbd5e1\",\n\t\tpaddingLeft: 12,\n\t\tmarginLeft: 0,\n\t\tmarginVertical: 4,\n\t\topacity: 0.8,\n\t},\n\tbullet_list: { marginVertical: 4 },\n\tordered_list: { marginVertical: 4 },\n\tlist_item: { marginVertical: 2 },\n\thr: { backgroundColor: \"rgba(15,23,42,0.1)\", height: 1, marginVertical: 8 },\n\tlink: { color: PAYMAN_TEAL, textDecorationLine: \"underline\" },\n\ttable: {\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(15,23,42,0.1)\",\n\t\tborderRadius: 6,\n\t\tmarginVertical: 6,\n\t\toverflow: \"hidden\",\n\t},\n\tth: { backgroundColor: \"rgba(15,23,42,0.05)\", padding: 8, fontWeight: \"600\", fontSize: 13 },\n\ttd: {\n\t\tpadding: 8,\n\t\tfontSize: 13,\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: \"rgba(15,23,42,0.07)\",\n\t},\n} as Record<string, object>);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport {\n\tActivityIndicator,\n\tNativeScrollEvent,\n\tNativeSyntheticEvent,\n\tPressable,\n\tScrollView,\n\tStyleSheet,\n\tView,\n} from \"react-native\";\nimport { ArrowDown } from \"lucide-react-native\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (animated?: boolean) => void;\n};\n\nconst NEAR_BOTTOM_THRESHOLD = 120;\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisLoadingSession = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick: _onImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\t// userAction props are handled by the modal in PaymanChat.native — ignored here\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollViewRef = useRef<ScrollView>(null);\n\t\tconst followingBottomRef = useRef(true);\n\t\tconst isProgrammaticScrollRef = useRef(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\n\t\tconst scrollToBottom = useCallback((animated = false) => {\n\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\tfollowingBottomRef.current = true;\n\t\t\tsetShowScrollBtn(false);\n\t\t\tscrollViewRef.current?.scrollToEnd({ animated });\n\t\t\tconst clear = () => {\n\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t};\n\t\t\tif (animated) {\n\t\t\t\tsetTimeout(clear, 400);\n\t\t\t} else {\n\t\t\t\trequestAnimationFrame(clear);\n\t\t\t}\n\t\t}, []);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (animated = false) => scrollToBottom(animated),\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\t// Scroll to bottom on new messages when following\n\t\tuseEffect(() => {\n\t\t\tconst prevCount = prevCountRef.current;\n\t\t\tprevCountRef.current = messages.length;\n\t\t\tif (messages.length > prevCount) {\n\t\t\t\tconst last = messages[messages.length - 1];\n\t\t\t\t// Always follow on a new user message; follow on assistant if pinned\n\t\t\t\tif (last?.role === \"user\" || followingBottomRef.current) {\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(false));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\t// Initial scroll to bottom\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(false), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\t// Auto-pin to bottom during streaming\n\t\tconst handleContentSizeChange = useCallback(() => {\n\t\t\tif (followingBottomRef.current) {\n\t\t\t\tscrollViewRef.current?.scrollToEnd({ animated: false });\n\t\t\t}\n\t\t}, []);\n\n\t\tconst handleScroll = useCallback(\n\t\t\t(e: NativeSyntheticEvent<NativeScrollEvent>) => {\n\t\t\t\tif (isProgrammaticScrollRef.current) return;\n\t\t\t\tconst { contentOffset, contentSize, layoutMeasurement } =\n\t\t\t\t\te.nativeEvent;\n\t\t\t\tconst distanceFromBottom =\n\t\t\t\t\tcontentSize.height - contentOffset.y - layoutMeasurement.height;\n\t\t\t\tconst nearBottom = distanceFromBottom <= NEAR_BOTTOM_THRESHOLD;\n\t\t\t\tfollowingBottomRef.current = nearBottom;\n\t\t\t\tsetShowScrollBtn(!nearBottom);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\treturn (\n\t\t\t<View style={s.root}>\n\t\t\t\t<ScrollView\n\t\t\t\t\tref={scrollViewRef}\n\t\t\t\t\tstyle={s.scroll}\n\t\t\t\t\tcontentContainerStyle={s.content}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tonContentSizeChange={handleContentSizeChange}\n\t\t\t\t\tscrollEventThrottle={16}\n\t\t\t\t\tkeyboardDismissMode=\"interactive\"\n\t\t\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\t\t>\n\t\t\t\t\t{isLoadingSession ? (\n\t\t\t\t\t\t<View style={s.loadingContainer}>\n\t\t\t\t\t\t\t<ActivityIndicator size=\"large\" color=\"#00858d\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tmessages.map((message) =>\n\t\t\t\t\t\t\tmessage.role === \"user\" ? (\n\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\n\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<AssistantMessageV2\n\t\t\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Bottom padding so last message isn't flush against the input */}\n\t\t\t\t\t<View style={s.bottomPad} />\n\t\t\t\t</ScrollView>\n\n\t\t\t\t{showScrollBtn ? (\n\t\t\t\t\t<View style={s.scrollBtnContainer} pointerEvents=\"box-none\">\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tstyle={s.scrollBtn}\n\t\t\t\t\t\t\tonPress={() => scrollToBottom(true)}\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown size={16} color=\"#555\" strokeWidth={2.5} />\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t</View>\n\t\t\t\t) : null}\n\t\t\t</View>\n\t\t);\n\t},\n);\n\nconst s = StyleSheet.create({\n\troot: {\n\t\tflex: 1,\n\t\tminHeight: 0,\n\t\tposition: \"relative\",\n\t},\n\tscroll: {\n\t\tflex: 1,\n\t},\n\tcontent: {\n\t\tflexGrow: 1,\n\t\tpaddingTop: 12,\n\t\tpaddingBottom: 4,\n\t},\n\tloadingContainer: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingVertical: 60,\n\t},\n\tbottomPad: {\n\t\theight: 16,\n\t},\n\tscrollBtnContainer: {\n\t\tposition: \"absolute\",\n\t\tbottom: 16,\n\t\tleft: 0,\n\t\tright: 0,\n\t\talignItems: \"center\",\n\t},\n\tscrollBtn: {\n\t\tbackgroundColor: \"#fff\",\n\t\tborderRadius: 20,\n\t\twidth: 36,\n\t\theight: 36,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tshadowColor: \"#000\",\n\t\tshadowOffset: { width: 0, height: 2 },\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 6,\n\t\televation: 4,\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.07)\",\n\t},\n});\n","import React, { memo, useEffect, useRef, useState } from \"react\";\nimport {\n\tAnimated,\n\tEasing,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport type { VoiceState } from \"@paymanai/payman-typescript-ask-sdk\";\n\n// ============================================\n// TYPES\n// ============================================\ninterface VoiceOverlayProps {\n\tvisible: boolean;\n\tvoiceState: VoiceState;\n\ttranscribedText: string;\n\tonStopRecording: () => void;\n}\n\n// ============================================\n// WAVEFORM BAR\n// ============================================\nconst WaveformBar = memo(\n\t({\n\t\tdelay,\n\t\tisActive,\n\t\tcolor,\n\t}: {\n\t\tdelay: number;\n\t\tisActive: boolean;\n\t\tcolor: string;\n\t}) => {\n\t\tconst height = useRef(new Animated.Value(6)).current;\n\n\t\tuseEffect(() => {\n\t\t\tif (isActive) {\n\t\t\t\tconst animation = Animated.loop(\n\t\t\t\t\tAnimated.sequence([\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: 14 + Math.random() * 10,\n\t\t\t\t\t\t\tduration: 300 + Math.random() * 50,\n\t\t\t\t\t\t\tdelay,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: 6 + Math.random() * 4,\n\t\t\t\t\t\t\tduration: 300 + Math.random() * 50,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t\tanimation.start();\n\t\t\t\treturn () => animation.stop();\n\t\t\t} else {\n\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\ttoValue: 6,\n\t\t\t\t\tduration: 300,\n\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t}).start();\n\t\t\t}\n\t\t}, [isActive, delay, height]);\n\n\t\treturn (\n\t\t\t<Animated.View\n\t\t\t\tstyle={[styles.waveformBar, { height, backgroundColor: color }]}\n\t\t\t/>\n\t\t);\n\t}\n);\n\nWaveformBar.displayName = \"WaveformBar\";\n\n// ============================================\n// ROLLING TEXT\n// ============================================\nconst RollingText = memo(({ text, color }: { text: string; color: string }) => {\n\tconst [lines, setLines] = React.useState<string[]>([]);\n\tconst [currentLineIndex, setCurrentLineIndex] = React.useState(0);\n\tconst translateY = useRef(new Animated.Value(0)).current;\n\tconst opacity = useRef(new Animated.Value(1)).current;\n\n\t// Split text into chunks\n\tuseEffect(() => {\n\t\tif (!text) {\n\t\t\tsetLines([]);\n\t\t\tsetCurrentLineIndex(0);\n\t\t\treturn;\n\t\t}\n\n\t\tconst words = text.split(\" \");\n\t\tconst newLines: string[] = [];\n\t\tlet currentLine = \"\";\n\n\t\twords.forEach((word) => {\n\t\t\tconst testLine = currentLine ? `${currentLine} ${word}` : word;\n\t\t\tif (testLine.length > 35 && currentLine) {\n\t\t\t\tnewLines.push(currentLine);\n\t\t\t\tcurrentLine = word;\n\t\t\t} else {\n\t\t\t\tcurrentLine = testLine;\n\t\t\t}\n\t\t});\n\n\t\tif (currentLine) {\n\t\t\tnewLines.push(currentLine);\n\t\t}\n\n\t\tsetLines(newLines);\n\n\t\tif (newLines.length > 0) {\n\t\t\tconst newIndex = newLines.length - 1;\n\n\t\t\tif (newIndex > currentLineIndex) {\n\t\t\t\tAnimated.sequence([\n\t\t\t\t\tAnimated.parallel([\n\t\t\t\t\t\tAnimated.timing(translateY, {\n\t\t\t\t\t\t\ttoValue: -20,\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\t\t\ttoValue: 0,\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t]),\n\t\t\t\t\tAnimated.timing(translateY, {\n\t\t\t\t\t\ttoValue: 20,\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t\tAnimated.parallel([\n\t\t\t\t\t\tAnimated.timing(translateY, {\n\t\t\t\t\t\t\ttoValue: 0,\n\t\t\t\t\t\t\tduration: 200,\n\t\t\t\t\t\t\teasing: Easing.out(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAnimated.timing(opacity, {\n\t\t\t\t\t\t\ttoValue: 1,\n\t\t\t\t\t\t\tduration: 200,\n\t\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t]),\n\t\t\t\t]).start();\n\n\t\t\t\tsetCurrentLineIndex(newIndex);\n\t\t\t}\n\t\t}\n\t}, [text, currentLineIndex, translateY, opacity]);\n\n\tconst currentText = lines[currentLineIndex] || text;\n\n\treturn (\n\t\t<Animated.Text\n\t\t\tstyle={[\n\t\t\t\tstyles.transcribedText,\n\t\t\t\t{\n\t\t\t\t\tcolor,\n\t\t\t\t\topacity,\n\t\t\t\t\ttransform: [{ translateY }],\n\t\t\t\t},\n\t\t\t]}\n\t\t\tnumberOfLines={1}\n\t\t>\n\t\t\t{currentText}\n\t\t</Animated.Text>\n\t);\n});\n\nRollingText.displayName = \"RollingText\";\n\n// ============================================\n// MAIN VOICE OVERLAY\n// ============================================\nexport const VoiceOverlay = memo(\n\t({\n\t\tvisible,\n\t\tvoiceState,\n\t\ttranscribedText,\n\t\tonStopRecording,\n\t}: VoiceOverlayProps) => {\n\t\tconst panelHeight = useRef(new Animated.Value(0)).current;\n\t\tconst contentOpacity = useRef(new Animated.Value(0)).current;\n\t\tconst [mounted, setMounted] = useState(false);\n\n\t\tconst isListening = voiceState === \"listening\";\n\n\t\tconst PANEL_CONTENT_HEIGHT = 160;\n\n\t\tconst bgColor = \"#15687d\";\n\t\tconst textColor = \"#ffffff\";\n\t\tconst mutedColor = \"rgba(255,255,255,0.75)\";\n\t\tconst primaryColor = \"#ffffff\";\n\n\t\tuseEffect(() => {\n\t\t\tif (visible) {\n\t\t\t\tsetMounted(true);\n\t\t\t\tAnimated.sequence([\n\t\t\t\t\tAnimated.timing(panelHeight, {\n\t\t\t\t\t\ttoValue: PANEL_CONTENT_HEIGHT,\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t}),\n\t\t\t\t\tAnimated.timing(contentOpacity, {\n\t\t\t\t\t\ttoValue: 1,\n\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t]).start();\n\t\t\t} else {\n\t\t\t\tAnimated.parallel([\n\t\t\t\t\tAnimated.timing(contentOpacity, {\n\t\t\t\t\t\ttoValue: 0,\n\t\t\t\t\t\tduration: 100,\n\t\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\t}),\n\t\t\t\t\tAnimated.timing(panelHeight, {\n\t\t\t\t\t\ttoValue: 0,\n\t\t\t\t\t\tduration: 220,\n\t\t\t\t\t\teasing: Easing.in(Easing.ease),\n\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t}),\n\t\t\t\t]).start(() => setMounted(false));\n\t\t\t}\n\t\t}, [visible, panelHeight, contentOpacity]);\n\n\t\tif (!mounted) return null;\n\n\t\treturn (\n\t\t\t<Pressable onPress={onStopRecording} style={styles.panelWrapper}>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.panel,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theight: panelHeight,\n\t\t\t\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<Animated.View style={[styles.content, { opacity: contentOpacity }]}>\n\t\t\t\t\t\t<View style={styles.textContainer}>\n\t\t\t\t\t\t\t{transcribedText.length > 0 ? (\n\t\t\t\t\t\t\t\t<RollingText text={transcribedText} color={textColor} />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Text style={[styles.placeholderText, { color: mutedColor }]}>\n\t\t\t\t\t\t\t\t\tListening...\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={styles.controlsContainer}>\n\t\t\t\t\t\t\t<View style={styles.waveformContainer}>\n\t\t\t\t\t\t\t\t{[0, 1, 2, 3, 4].map((index) => (\n\t\t\t\t\t\t\t\t\t<WaveformBar\n\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\tdelay={index * 20}\n\t\t\t\t\t\t\t\t\t\tisActive={isListening}\n\t\t\t\t\t\t\t\t\t\tcolor={primaryColor}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t<Text style={[styles.hintText, { color: mutedColor }]}>\n\t\t\t\t\t\t\t\tTap to stop\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</Animated.View>\n\t\t\t\t</Animated.View>\n\t\t\t</Pressable>\n\t\t);\n\t}\n);\n\nVoiceOverlay.displayName = \"VoiceOverlay\";\n\n// ============================================\n// STYLES\n// ============================================\nconst styles = StyleSheet.create({\n\tpanelWrapper: {\n\t\tzIndex: 10,\n\t\televation: 10,\n\t},\n\tpanel: {\n\t\toverflow: \"hidden\",\n\t\tborderTopLeftRadius: 20,\n\t\tborderTopRightRadius: 20,\n\t},\n\tcontent: {\n\t\tflex: 1,\n\t\tpaddingHorizontal: 24,\n\t\tpaddingTop: 20,\n\t},\n\ttextContainer: {\n\t\theight: 32,\n\t\tjustifyContent: \"center\",\n\t\tmarginBottom: 16,\n\t\toverflow: \"hidden\",\n\t},\n\ttranscribedText: {\n\t\tfontSize: 18,\n\t\tfontWeight: \"500\",\n\t\ttextAlign: \"left\",\n\t},\n\tplaceholderText: {\n\t\tfontSize: 15,\n\t\ttextAlign: \"left\",\n\t\tfontWeight: \"800\",\n\t},\n\tcontrolsContainer: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"flex-start\",\n\t},\n\twaveformContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 5,\n\t\theight: 28,\n\t\tmarginBottom: 12,\n\t},\n\twaveformBar: {\n\t\twidth: 3,\n\t\tborderRadius: 2,\n\t},\n\thintText: {\n\t\tfontSize: 12,\n\t},\n});\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport {\n\tAnimated,\n\tEasing,\n\tKeyboard,\n\tKeyboardAvoidingView,\n\tPlatform,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport { useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { PaymanChatProps, PaymanChatRef } from \"../../types\";\nimport { ChatInputV2, type ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { InlineVerificationPanel } from \"../v2/InlineVerificationPanel.native\";\nimport { MessageListV2, type MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { VoiceOverlay } from \"../VoiceOverlay\";\n\nconst DEFAULT_ACCENT = \"#00858d\";\n\ntype ChatPalette = {\n\tbackground: string;\n\ttextPrimary: string;\n\ttextSecondary: string;\n\ttextMuted: string;\n\theroHaloFrom: string;\n\theroHaloTo: string;\n\theroRing: string;\n\theroDot: string;\n\tdisabledText: string;\n};\n\nfunction getPalette(theme: \"light\" | \"dark\", accent: string): ChatPalette {\n\tif (theme === \"dark\") {\n\t\treturn {\n\t\t\tbackground: \"#0d1719\",\n\t\t\ttextPrimary: \"#f5f8f8\",\n\t\t\ttextSecondary: \"rgba(245,248,248,0.72)\",\n\t\t\ttextMuted: \"rgba(245,248,248,0.45)\",\n\t\t\theroHaloFrom: \"rgba(0,133,141,0.16)\",\n\t\t\theroHaloTo: \"rgba(0,133,141,0.06)\",\n\t\t\theroRing: \"rgba(0,133,141,0.35)\",\n\t\t\theroDot: accent,\n\t\t\tdisabledText: \"rgba(245,248,248,0.45)\",\n\t\t};\n\t}\n\treturn {\n\t\tbackground: \"#ffffff\",\n\t\ttextPrimary: \"#1d1d1f\",\n\t\ttextSecondary: \"#5e5d5a\",\n\t\ttextMuted: \"#8a8a86\",\n\t\theroHaloFrom: \"rgba(0,133,141,0.10)\",\n\t\theroHaloTo: \"rgba(0,133,141,0.02)\",\n\t\theroRing: \"rgba(0,133,141,0.20)\",\n\t\theroDot: accent,\n\t\tdisabledText: \"#8a8a86\",\n\t};\n}\n\n/**\n * PaymanChat — React Native implementation.\n *\n * Mirrors web PaymanChat behaviour:\n * - Full streaming via XHR (streamingClient.native.ts in the TS SDK)\n * - Auto-scrolling message list with shimmer / thinking parity\n * - KeyboardAvoidingView so the input stays above the keyboard and the\n * latest assistant text remains visible while typing\n * - Inline OTP verification above the input\n * - VoiceOverlay for speech-to-text\n * - Ref API: resetSession / clearMessages / cancelStream / getSessionId /\n * getMessages / loadSession\n */\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChat({ config, callbacks = {}, children }, ref) {\n\t\t// ── Chat state ──────────────────────────────────────────────────────────\n\n\t\tconst {\n\t\t\tmessages,\n\t\t\tsendMessage,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tresetSession: resetChatSession,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t\tuserActionState,\n\t\t\tapproveUserAction,\n\t\t\trejectUserAction,\n\t\t\tresendOtp,\n\t\t\tloadSession,\n\t\t\tloadingSessionId,\n\t\t} = useChatV2(config, callbacks);\n\n\t\t// ── Voice ───────────────────────────────────────────────────────────────\n\n\t\tconst voiceEnabled =\n\t\t\tconfig.ui?.input?.voice === true ||\n\t\t\t(typeof config.ui?.input?.voice === \"object\" &&\n\t\t\t\tconfig.ui.input.voice !== null);\n\n\t\tconst {\n\t\t\tvoiceState,\n\t\t\ttranscribedText,\n\t\t\tisAvailable: voiceAvailable,\n\t\t\tisRecording,\n\t\t\tstartRecording,\n\t\t\tstopRecording,\n\t\t\tclearTranscript,\n\t\t} = useVoice();\n\n\t\t// ── Attachment configuration ────────────────────────────────────────────\n\n\t\tconst attachmentsCfg = config.ui?.input?.attachments;\n\t\tconst attachmentsAllowed =\n\t\t\tattachmentsCfg === undefined ||\n\t\t\tattachmentsCfg === true ||\n\t\t\t(typeof attachmentsCfg === \"object\" && attachmentsCfg !== null);\n\t\tconst showUploadImage =\n\t\t\tattachmentsAllowed &&\n\t\t\t(typeof attachmentsCfg !== \"object\" || attachmentsCfg === null\n\t\t\t\t? true\n\t\t\t\t: attachmentsCfg.uploadImage !== false);\n\t\tconst showAttachFile =\n\t\t\tattachmentsAllowed &&\n\t\t\t(typeof attachmentsCfg !== \"object\" || attachmentsCfg === null\n\t\t\t\t? true\n\t\t\t\t: attachmentsCfg.attachFile !== false);\n\n\t\t// ── UI state ────────────────────────────────────────────────────────────\n\n\t\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\t\tconst chatInputRef = useRef<ChatInputV2Handle>(null);\n\t\tconst messageListRef = useRef<MessageListV2Handle>(null);\n\t\tconst resetToEmptyRef = useRef(false);\n\n\t\tuseEffect(() => {\n\t\t\tif (resetToEmptyRef.current) {\n\t\t\t\tif (messages.length === 0) {\n\t\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\t\tresetToEmptyRef.current = false;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (messages.length > 0 && !hasEverSentMessage) {\n\t\t\t\tsetHasEverSentMessage(true);\n\t\t\t}\n\t\t}, [messages.length, hasEverSentMessage]);\n\n\t\t// ── Voice: sync transcript into input after recording stops ─────────────\n\n\t\tconst prevRecordingRef = useRef(isRecording);\n\t\tuseEffect(() => {\n\t\t\tconst wasRecording = prevRecordingRef.current;\n\t\t\tprevRecordingRef.current = isRecording;\n\t\t\tif (wasRecording && !isRecording && transcribedText.trim()) {\n\t\t\t\tchatInputRef.current?.setDraft(transcribedText.trim());\n\t\t\t}\n\t\t}, [isRecording, transcribedText]);\n\n\t\t// ── Handlers ────────────────────────────────────────────────────────────\n\n\t\tconst handleVoicePress = useCallback(async () => {\n\t\t\tif (!voiceAvailable) return;\n\t\t\tif (isRecording) {\n\t\t\t\tstopRecording();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearTranscript();\n\t\t\tawait startRecording();\n\t\t}, [voiceAvailable, isRecording, stopRecording, clearTranscript, startRecording]);\n\n\t\tconst handleSend = useCallback(\n\t\t\t(text: string) => {\n\t\t\t\tif (isRecording) stopRecording();\n\t\t\t\tif (!text.trim()) return;\n\t\t\t\tvoid sendMessage(text.trim());\n\t\t\t},\n\t\t\t[isRecording, stopRecording, sendMessage],\n\t\t);\n\n\t\tconst dismissKeyboard = useCallback(() => {\n\t\t\tKeyboard.dismiss();\n\t\t}, []);\n\n\t\tconst handleEditMessageDraft = useCallback(\n\t\t\t(messageId: string) => {\n\t\t\t\tconst targetMessage = messages.find(\n\t\t\t\t\t(message) => message.id === messageId && message.role === \"user\",\n\t\t\t\t);\n\t\t\t\tif (!targetMessage?.content.trim()) return;\n\t\t\t\tchatInputRef.current?.setDraft(targetMessage.content);\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tmessageListRef.current?.scrollToBottom(true);\n\t\t\t\t});\n\t\t\t},\n\t\t\t[messages],\n\t\t);\n\n\t\tconst handleRetryUserMessage = useCallback(\n\t\t\t(messageId: string) => {\n\t\t\t\tif (isWaitingForResponse) return;\n\t\t\t\tconst targetMessage = messages.find(\n\t\t\t\t\t(message) => message.id === messageId && message.role === \"user\",\n\t\t\t\t);\n\t\t\t\tif (!targetMessage?.content.trim()) return;\n\t\t\t\tvoid sendMessage(targetMessage.content.trim());\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tmessageListRef.current?.scrollToBottom(false);\n\t\t\t\t});\n\t\t\t},\n\t\t\t[isWaitingForResponse, messages, sendMessage],\n\t\t);\n\n\t\tconst performResetSession = useCallback(() => {\n\t\t\tresetToEmptyRef.current = true;\n\t\t\tif (isRecording) stopRecording();\n\t\t\tclearTranscript();\n\t\t\tchatInputRef.current?.setDraft(\"\");\n\t\t\tresetChatSession();\n\t\t\tcallbacks.onResetSession?.();\n\t\t}, [isRecording, stopRecording, clearTranscript, resetChatSession, callbacks]);\n\n\t\t// ── Ref API ─────────────────────────────────────────────────────────────\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tresetSession: performResetSession,\n\t\t\t\tclearMessages,\n\t\t\t\tcancelStream,\n\t\t\t\tgetSessionId,\n\t\t\t\tgetMessages,\n\t\t\t\tloadSession,\n\t\t\t}),\n\t\t\t[performResetSession, clearMessages, cancelStream, getSessionId, getMessages, loadSession],\n\t\t);\n\n\t\t// ── Derived config ──────────────────────────────────────────────────────\n\n\t\tconst ui = config.ui ?? {};\n\t\tconst theme: \"light\" | \"dark\" = ui.theme === \"dark\" ? \"dark\" : \"light\";\n\t\tconst accent = ui.accent ?? DEFAULT_ACCENT;\n\t\tconst palette = useMemo(() => getPalette(theme, accent), [theme, accent]);\n\t\tconst placeholder = ui.input?.placeholder ?? \"Type your message…\";\n\t\tconst showResetButton = ui.input?.showResetButton ?? false;\n\t\tconst messageActionsConfig = ui.messages?.actions;\n\n\t\tconst messageActions = useMemo(\n\t\t\t() => ({\n\t\t\t\tuserMessageActions: {\n\t\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t\t},\n\t\t\t\tassistantMessageActions: {\n\t\t\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[messageActionsConfig],\n\t\t);\n\n\t\t// ── Empty / disabled states ─────────────────────────────────────────────\n\n\t\tconst isEmpty = messages.length === 0;\n\t\tconst showEmptyShell = isEmpty && !hasEverSentMessage;\n\t\tconst emptyStateText = ui.emptyState?.text ?? \"How may I assist you today?\";\n\t\tconst emptyStateEyebrow = ui.emptyState?.eyebrow;\n\t\tconst showEmptyIcon = ui.emptyState?.icon ?? true;\n\t\tconst emptyStateLogo = ui.emptyState?.logo;\n\t\tconst availability = config.availability;\n\n\t\tif (availability?.state === \"disabled\") {\n\t\t\treturn (\n\t\t\t\t<View style={[s.root, { backgroundColor: palette.background }]}>\n\t\t\t\t\t{children}\n\t\t\t\t\t<View style={s.disabledContainer}>\n\t\t\t\t\t\t<Text style={[s.disabledText, { color: palette.disabledText }]}>\n\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\n\t\tconst isReadOnly = availability?.state === \"readOnly\";\n\t\tconst hideSendForVerification =\n\t\t\tuserActionState.request != null && userActionState.result == null;\n\t\tconst verificationPanel = userActionState.request ? (\n\t\t\t<InlineVerificationPanel\n\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t\tonApprove={approveUserAction}\n\t\t\t\tonReject={rejectUserAction}\n\t\t\t\tonResend={resendOtp}\n\t\t\t/>\n\t\t) : null;\n\n\t\t// ── Shared input props ──────────────────────────────────────────────────\n\n\t\tconst inputProps = {\n\t\t\tonSend: handleSend,\n\t\t\tonCancel: cancelStream,\n\t\t\tdisabled: false as const,\n\t\t\tisStreaming: isWaitingForResponse,\n\t\t\tplaceholder: isRecording ? \"Listening…\" : placeholder,\n\t\t\tenableVoice: voiceEnabled,\n\t\t\tvoiceAvailable: voiceEnabled && voiceAvailable,\n\t\t\tisRecording,\n\t\t\tonVoicePress: voiceEnabled ? handleVoicePress : undefined,\n\t\t\tshowResetSession: showResetButton,\n\t\t\tonResetSession: performResetSession,\n\t\t\tshowUploadImageButton: showUploadImage,\n\t\t\tshowAttachFileButton: showAttachFile,\n\t\t\tonUploadImageClick: callbacks.onUploadImageClick,\n\t\t\tonAttachFileClick: callbacks.onAttachFileClick,\n\t\t\ttheme,\n\t\t\thideSendButton: hideSendForVerification,\n\t\t\ttopAccessory: verificationPanel,\n\t\t};\n\n\t\t// ── Render ──────────────────────────────────────────────────────────────\n\n\t\treturn (\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.root, { backgroundColor: palette.background }]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={0}\n\t\t\t>\n\t\t\t\t{children}\n\n\t\t\t\t{showEmptyShell ? (\n\t\t\t\t\t<View style={s.emptyStateRoot}>\n\t\t\t\t\t\t<View style={s.emptyStateCenter} onTouchStart={dismissKeyboard}>\n\t\t\t\t\t\t\t{emptyStateLogo\n\t\t\t\t\t\t\t\t? emptyStateLogo\n\t\t\t\t\t\t\t\t: showEmptyIcon\n\t\t\t\t\t\t\t\t\t? <HeroMark palette={palette} />\n\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t{emptyStateEyebrow ? (\n\t\t\t\t\t\t\t\t<Text style={[s.emptyEyebrow, { color: palette.textMuted }]}>\n\t\t\t\t\t\t\t\t\t{emptyStateEyebrow}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<Text style={[s.emptyStateText, { color: \"#94a3b8\" }]}>\n\t\t\t\t\t\t\t\t{emptyStateText}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!emptyStateLogo ? (\n\t\t\t\t\t\t\t\t<Text style={[s.emptyStateSubtext, { color: palette.textSecondary }]}>\n\t\t\t\t\t\t\t\t\tAsk anything about your accounts, payments, or transfers.\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t\t{!isReadOnly ? (\n\t\t\t\t\t\t\t<ChatInputV2 ref={chatInputRef} {...inputProps} />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</View>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<View style={s.messageListWrapper} onTouchStart={dismissKeyboard}>\n\t\t\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\t\t\tref={messageListRef}\n\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\tisLoadingSession={!!loadingSessionId}\n\t\t\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\t\t\tonExecutionTraceClick={callbacks.onExecutionTraceClick}\n\t\t\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t{voiceEnabled ? (\n\t\t\t\t\t\t\t<VoiceOverlay\n\t\t\t\t\t\t\t\tvisible={isRecording}\n\t\t\t\t\t\t\t\tvoiceState={voiceState}\n\t\t\t\t\t\t\t\ttranscribedText={transcribedText}\n\t\t\t\t\t\t\t\tonStopRecording={stopRecording}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{!isReadOnly ? (\n\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\tref={chatInputRef}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</KeyboardAvoidingView>\n\t\t);\n\t},\n);\n\n// ─── Hero mark for empty state ───────────────────────────────────────────────\n// Soft animated Payman-teal logo spot; matches the centered hero in the design.\n\nfunction HeroMark({ palette }: { palette: ChatPalette }) {\n\tconst scale = useRef(new Animated.Value(0.92)).current;\n\tconst opacity = useRef(new Animated.Value(0)).current;\n\tconst ringSpin = useRef(new Animated.Value(0)).current;\n\tconst dotPulse = useRef(new Animated.Value(0)).current;\n\n\tuseEffect(() => {\n\t\tAnimated.parallel([\n\t\t\tAnimated.timing(opacity, {\n\t\t\t\ttoValue: 1,\n\t\t\t\tduration: 420,\n\t\t\t\teasing: Easing.out(Easing.cubic),\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}),\n\t\t\tAnimated.spring(scale, {\n\t\t\t\ttoValue: 1,\n\t\t\t\tfriction: 6,\n\t\t\t\ttension: 90,\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}),\n\t\t]).start();\n\n\t\tAnimated.loop(\n\t\t\tAnimated.timing(ringSpin, {\n\t\t\t\ttoValue: 1,\n\t\t\t\tduration: 14000,\n\t\t\t\teasing: Easing.linear,\n\t\t\t\tuseNativeDriver: true,\n\t\t\t}),\n\t\t).start();\n\n\t\tAnimated.loop(\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(dotPulse, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tduration: 1600,\n\t\t\t\t\teasing: Easing.inOut(Easing.cubic),\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t\tAnimated.timing(dotPulse, {\n\t\t\t\t\ttoValue: 0,\n\t\t\t\t\tduration: 1600,\n\t\t\t\t\teasing: Easing.inOut(Easing.cubic),\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t]),\n\t\t).start();\n\t}, [opacity, scale, ringSpin, dotPulse]);\n\n\tconst ringRotate = ringSpin.interpolate({\n\t\tinputRange: [0, 1],\n\t\toutputRange: [\"0deg\", \"360deg\"],\n\t});\n\tconst dotScale = dotPulse.interpolate({\n\t\tinputRange: [0, 1],\n\t\toutputRange: [0.92, 1.06],\n\t});\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[hero.halo, {\n\t\t\t\tbackgroundColor: palette.heroHaloFrom,\n\t\t\t\topacity,\n\t\t\t\ttransform: [{ scale }],\n\t\t\t}]}\n\t\t>\n\t\t\t<View style={[hero.haloInner, { backgroundColor: palette.heroHaloTo }]}>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\thero.ring,\n\t\t\t\t\t\t{ borderColor: palette.heroRing, transform: [{ rotate: ringRotate }] },\n\t\t\t\t\t]}\n\t\t\t\t/>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\thero.dot,\n\t\t\t\t\t\t{ backgroundColor: palette.heroDot, transform: [{ scale: dotScale }] },\n\t\t\t\t\t]}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t</Animated.View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\troot: {\n\t\tflex: 1,\n\t\toverflow: \"hidden\",\n\t},\n\tmessageListWrapper: {\n\t\tflex: 1,\n\t\tminHeight: 0,\n\t},\n\temptyStateRoot: {\n\t\tflex: 1,\n\t\tjustifyContent: \"flex-end\",\n\t},\n\temptyStateCenter: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingHorizontal: 32,\n\t\tpaddingBottom: 24,\n\t},\n\temptyEyebrow: {\n\t\tmarginTop: 28,\n\t\tmarginBottom: 8,\n\t\tfontSize: 13,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.4,\n\t\ttextTransform: \"uppercase\",\n\t},\n\temptyStateText: {\n\t\tfontSize: 30,\n\t\tfontWeight: \"600\",\n\t\ttextAlign: \"center\",\n\t\tletterSpacing: -0.7,\n\t\tlineHeight: 36,\n\t\t// Lean into a serif on iOS for a Claude-like editorial feel; system on Android\n\t\t...Platform.select({\n\t\t\tios: { fontFamily: \"Georgia\" },\n\t\t\tdefault: {},\n\t\t}),\n\t\tmarginTop: 24,\n\t},\n\temptyStateSubtext: {\n\t\tmarginTop: 10,\n\t\tfontSize: 15,\n\t\tlineHeight: 22,\n\t\ttextAlign: \"center\",\n\t\tletterSpacing: -0.15,\n\t\tmaxWidth: 320,\n\t},\n\tdisabledContainer: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t},\n\tdisabledText: {\n\t\tfontSize: 14,\n\t\ttextAlign: \"center\",\n\t},\n});\n\nconst hero = StyleSheet.create({\n\thalo: {\n\t\twidth: 96,\n\t\theight: 96,\n\t\tborderRadius: 48,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\thaloInner: {\n\t\twidth: 76,\n\t\theight: 76,\n\t\tborderRadius: 38,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tring: {\n\t\tposition: \"absolute\",\n\t\twidth: 60,\n\t\theight: 60,\n\t\tborderRadius: 30,\n\t\tborderWidth: 1.5,\n\t\tborderStyle: \"dashed\",\n\t},\n\tdot: {\n\t\twidth: 18,\n\t\theight: 18,\n\t\tborderRadius: 9,\n\t},\n});\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\tlistSessions,\n\ttype BaseChatConfig,\n\ttype SessionSummary,\n} from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { SessionHistoryOptions } from \"../types\";\nimport type { OptimisticSessionActivity } from \"../components/SessionHistorySidebar\";\n\nconst DEFAULT_WIDTH = 260;\nconst DEFAULT_MIN_WIDTH = 220;\nconst DEFAULT_MAX_WIDTH = 440;\nconst DEFAULT_PAGE_SIZE = 20;\n\ntype PersistedState = {\n\twidth: number;\n\tcollapsed: boolean;\n};\n\ntype UseSessionHistoryReturn = {\n\tsessions: SessionSummary[];\n\tisLoading: boolean;\n\terror: Error | null;\n\thasNext: boolean;\n\tloadMore: () => Promise<void>;\n\trefresh: () => Promise<void>;\n\n\twidth: number;\n\tsetWidth: (px: number) => void;\n\tcollapsed: boolean;\n\tsetCollapsed: (value: boolean | ((prev: boolean) => boolean)) => void;\n\n\tminWidth: number;\n\tmaxWidth: number;\n\n\tisReady: boolean; // true when workflow.name + session.owner.id are both present\n};\n\nfunction getPersistKey(config: BaseChatConfig, opts: SessionHistoryOptions): string {\n\tif (opts.persistKey) return opts.persistKey;\n\treturn `payman-chat-sidebar:${config.workflow.id ?? \"unknown\"}`;\n}\n\nfunction loadPersistedState(key: string): PersistedState | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\tconst raw = window.localStorage.getItem(key);\n\t\tif (!raw) return null;\n\t\tconst parsed = JSON.parse(raw) as Partial<PersistedState>;\n\t\tif (typeof parsed.width !== \"number\" || typeof parsed.collapsed !== \"boolean\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn { width: parsed.width, collapsed: parsed.collapsed };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction savePersistedState(key: string, state: PersistedState): void {\n\tif (typeof window === \"undefined\") return;\n\ttry {\n\t\twindow.localStorage.setItem(key, JSON.stringify(state));\n\t} catch {\n\t\t// ignore quota / privacy-mode errors\n\t}\n}\n\nexport function useSessionHistory(\n\tconfig: BaseChatConfig,\n\toptions: SessionHistoryOptions = {},\n\toptimisticActivity?: OptimisticSessionActivity | null,\n): UseSessionHistoryReturn {\n\tconst defaultWidth = options.defaultWidth ?? DEFAULT_WIDTH;\n\tconst minWidth = options.minWidth ?? DEFAULT_MIN_WIDTH;\n\tconst maxWidth = options.maxWidth ?? DEFAULT_MAX_WIDTH;\n\tconst pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;\n\n\tconst persistKey = useMemo(\n\t\t() => getPersistKey(config, options),\n\t\t[config.workflow.id, options.persistKey],\n\t);\n\n\tconst [width, setWidthState] = useState<number>(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\treturn persisted?.width ?? defaultWidth;\n\t});\n\tconst [collapsed, setCollapsedState] = useState<boolean>(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\treturn persisted?.collapsed ?? options.defaultCollapsed ?? false;\n\t});\n\n\t// Rehydrate when persistKey (workflow.id) changes\n\tuseEffect(() => {\n\t\tconst persisted = loadPersistedState(persistKey);\n\t\tsetWidthState(persisted?.width ?? defaultWidth);\n\t\tsetCollapsedState(persisted?.collapsed ?? options.defaultCollapsed ?? false);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [persistKey]);\n\n\tconst setWidth = useCallback(\n\t\t(px: number) => {\n\t\t\tconst clamped = Math.max(minWidth, Math.min(maxWidth, Math.round(px)));\n\t\t\tsetWidthState(clamped);\n\t\t\tsavePersistedState(persistKey, { width: clamped, collapsed });\n\t\t},\n\t\t[collapsed, maxWidth, minWidth, persistKey],\n\t);\n\n\tconst setCollapsed = useCallback(\n\t\t(value: boolean | ((prev: boolean) => boolean)) => {\n\t\t\tsetCollapsedState((prev) => {\n\t\t\t\tconst next = typeof value === \"function\" ? value(prev) : value;\n\t\t\t\tsavePersistedState(persistKey, { width, collapsed: next });\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[persistKey, width],\n\t);\n\n\tconst isReady = !!(\n\t\tconfig.session?.owner?.id &&\n\t\t(config.workflow.id || config.workflow.name)\n\t);\n\n\tconst [sessions, setSessions] = useState<SessionSummary[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [page, setPage] = useState(0);\n\tconst [hasNext, setHasNext] = useState(false);\n\n\tconst inFlightRef = useRef<AbortController | null>(null);\n\tconst configRef = useRef(config);\n\tconfigRef.current = config;\n\n\tconst fetchPage = useCallback(\n\t\tasync (pageIndex: number, replace: boolean) => {\n\t\t\tif (!isReady) return;\n\t\t\tinFlightRef.current?.abort();\n\t\t\tconst ac = new AbortController();\n\t\t\tinFlightRef.current = ac;\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst resp = await listSessions(configRef.current, {\n\t\t\t\t\tpage: pageIndex,\n\t\t\t\t\tsize: pageSize,\n\t\t\t\t\tsignal: ac.signal,\n\t\t\t\t});\n\t\t\t\tsetSessions((prev) => (replace ? resp.data : [...prev, ...resp.data]));\n\t\t\t\tsetPage(pageIndex);\n\t\t\t\tsetHasNext(resp.pageInfo.hasNext);\n\t\t\t} catch (err) {\n\t\t\t\tif ((err as Error).name !== \"AbortError\") {\n\t\t\t\t\tsetError(err as Error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (inFlightRef.current === ac) {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[isReady, pageSize],\n\t);\n\n\tconst refresh = useCallback(() => fetchPage(0, true), [fetchPage]);\n\tconst loadMore = useCallback(async () => {\n\t\tif (!hasNext || isLoading) return;\n\t\tawait fetchPage(page + 1, false);\n\t}, [fetchPage, hasNext, isLoading, page]);\n\n\tuseEffect(() => {\n\t\tif (!optimisticActivity) return;\n\n\t\tsetSessions((prev) => {\n\t\t\tconst next = [...prev];\n\t\t\tlet existingIndex = next.findIndex(\n\t\t\t\t(session) => session.sessionId === optimisticActivity.sessionId,\n\t\t\t);\n\n\t\t\tif (existingIndex === -1 && optimisticActivity.previousSessionId) {\n\t\t\t\texistingIndex = next.findIndex(\n\t\t\t\t\t(session) =>\n\t\t\t\t\t\tsession.sessionId === optimisticActivity.previousSessionId,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst existing =\n\t\t\t\texistingIndex >= 0 ? next.splice(existingIndex, 1)[0] : undefined;\n\t\t\tconst preferredTitle =\n\t\t\t\texisting?.sessionTitle &&\n\t\t\t\texisting.sessionTitle.trim() &&\n\t\t\t\texisting.sessionTitle !== \"Untitled session\"\n\t\t\t\t\t? existing.sessionTitle\n\t\t\t\t\t: optimisticActivity.sessionTitle?.trim() ||\n\t\t\t\t\t\texisting?.sessionTitle ||\n\t\t\t\t\t\t\"Untitled session\";\n\n\t\t\tconst localSession: SessionSummary = existing ?? {\n\t\t\t\tuserId: config.session?.owner?.id ?? \"\",\n\t\t\t\tuserLabel:\n\t\t\t\t\tconfig.session?.owner?.name ??\n\t\t\t\t\tconfig.session?.owner?.id ??\n\t\t\t\t\t\"\",\n\t\t\t\tsessionId: optimisticActivity.sessionId,\n\t\t\t\tworkflowId: config.workflow.id ?? \"\",\n\t\t\t\tworkflowName: config.workflow.name,\n\t\t\t\tworkflowVersion: config.workflow.version ?? 0,\n\t\t\t\tlastMessageAt: optimisticActivity.lastMessageAt,\n\t\t\t\tmessageCount: 0,\n\t\t\t\tsessionTitle: preferredTitle,\n\t\t\t};\n\n\t\t\tnext.unshift({\n\t\t\t\t...localSession,\n\t\t\t\tsessionId: optimisticActivity.sessionId,\n\t\t\t\tlastMessageAt: optimisticActivity.lastMessageAt,\n\t\t\t\tsessionTitle: preferredTitle,\n\t\t\t});\n\n\t\t\treturn next;\n\t\t});\n\t}, [\n\t\tconfig.session?.owner?.id,\n\t\tconfig.session?.owner?.name,\n\t\tconfig.workflow.id,\n\t\tconfig.workflow.name,\n\t\tconfig.workflow.version,\n\t\toptimisticActivity,\n\t]);\n\n\t// Auto-load first page when the scope becomes ready or key config changes\n\tuseEffect(() => {\n\t\tif (!isReady) return;\n\t\tvoid fetchPage(0, true);\n\t\treturn () => {\n\t\t\tinFlightRef.current?.abort();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\tisReady,\n\t\tconfig.workflow.id,\n\t\tconfig.workflow.stage,\n\t\tconfig.session?.owner?.id,\n\t]);\n\n\treturn {\n\t\tsessions,\n\t\tisLoading,\n\t\terror,\n\t\thasNext,\n\t\tloadMore,\n\t\trefresh,\n\t\twidth,\n\t\tsetWidth,\n\t\tcollapsed,\n\t\tsetCollapsed,\n\t\tminWidth,\n\t\tmaxWidth,\n\t\tisReady,\n\t};\n}\n","import {\n\tAlertCircle,\n\tCheck,\n\tMessageSquare,\n\tPanelBottomOpen,\n\tPanelLeftClose,\n\tPanelLeftOpen,\n\tPlus,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type {\n\tBaseChatConfig,\n\tSessionSummary,\n} from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { SessionHistoryOptions } from \"../../types\";\nimport { cn } from \"../../utils/cn\";\nimport { useSessionHistory } from \"../../hooks/useSessionHistory\";\n\nconst MOBILE_BREAKPOINT = 640;\ntype PortalThemeStyle = Record<string, string>;\n\nexport type OptimisticSessionActivity = {\n\tkey: string;\n\tsessionId: string;\n\tpreviousSessionId?: string;\n\tlastMessageAt: string;\n\tsessionTitle?: string;\n};\n\nfunction useIsMobile(): boolean {\n\tconst [isMobile, setIsMobile] = useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth < MOBILE_BREAKPOINT;\n\t});\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n\t\tconst handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n\t\tsetIsMobile(mql.matches);\n\t\tmql.addEventListener(\"change\", handler);\n\t\treturn () => mql.removeEventListener(\"change\", handler);\n\t}, []);\n\treturn isMobile;\n}\n\nfunction readPortalThemeStyle(source: HTMLElement | null): PortalThemeStyle {\n\tif (typeof window === \"undefined\" || !source) return {};\n\tconst root = source.closest(\".payman-v2-root\");\n\tif (!(root instanceof HTMLElement)) return {};\n\n\tconst computed = window.getComputedStyle(root);\n\tconst style: PortalThemeStyle = {\n\t\tcolor: computed.color,\n\t\tfontFamily: computed.fontFamily,\n\t\tfontSize: computed.fontSize,\n\t\tlineHeight: computed.lineHeight,\n\t};\n\n\tfor (let index = 0; index < computed.length; index += 1) {\n\t\tconst name = computed.item(index);\n\t\tif (!name.startsWith(\"--payman-v2-\")) continue;\n\t\tconst value = computed.getPropertyValue(name).trim();\n\t\tif (value) style[name] = value;\n\t}\n\n\treturn style;\n}\n\nexport type SessionHistorySidebarProps = {\n\tconfig: BaseChatConfig;\n\toptions: SessionHistoryOptions;\n\tactiveSessionId?: string;\n\t/** Session id whose conversation history is currently being fetched.\n\t * The matching row renders a small inline spinner next to its title. */\n\tloadingSessionId?: string;\n\t/**\n\t * Session ids whose stream completed recently. Each matching row briefly\n\t * renders a check mark on the right of its title — the parent is\n\t * expected to drop the id from the set after a few seconds so the mark\n\t * goes away on its own.\n\t */\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\toptimisticActivity?: OptimisticSessionActivity | null;\n\t/** Called when the user clicks a row. */\n\tonSelectSession: (session: SessionSummary) => void;\n\t/** Called by the optional sidebar \"New Session\" button. */\n\tonNewSession?: () => void;\n\t/** Disabled state for the optional sidebar \"New Session\" button. */\n\tnewSessionDisabled?: boolean;\n\t/** Controlled mobile drawer open state. */\n\tmobileOpen: boolean;\n\tonMobileOpenChange: (open: boolean) => void;\n};\n\nexport function SessionHistorySidebar({\n\tconfig,\n\toptions,\n\tactiveSessionId,\n\tloadingSessionId,\n\trecentlyCompletedSessionIds,\n\toptimisticActivity,\n\tonSelectSession,\n\tonNewSession,\n\tnewSessionDisabled = false,\n\tmobileOpen,\n\tonMobileOpenChange,\n}: SessionHistorySidebarProps) {\n\tconst isMobile = useIsMobile();\n\tconst mobileThemeSourceRef = useRef<HTMLDivElement>(null);\n\tconst [mobilePortalThemeStyle, setMobilePortalThemeStyle] =\n\t\tuseState<PortalThemeStyle>({});\n\tconst history = useSessionHistory(config, options, optimisticActivity);\n\tconst showNewSessionButton = options.showNewSessionButton === true;\n\n\tuseEffect(() => {\n\t\tif (!isMobile) return;\n\t\tsetMobilePortalThemeStyle(readPortalThemeStyle(mobileThemeSourceRef.current));\n\t}, [isMobile, mobileOpen]);\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<div ref={mobileThemeSourceRef} style={{ display: \"contents\" }}>\n\t\t\t\t{!mobileOpen && (\n\t\t\t\t\t<div className=\"payman-sidebar-mobile-trigger\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label=\"Open recent sessions\"\n\t\t\t\t\t\t\ttitle=\"Recent sessions\"\n\t\t\t\t\t\t\tonClick={() => onMobileOpenChange(true)}\n\t\t\t\t\t\t\tclassName=\"payman-sidebar-collapsed-button payman-sidebar-mobile-trigger-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PanelBottomOpen size={17} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<MobileDrawer\n\t\t\t\t\topen={mobileOpen}\n\t\t\t\t\tonOpenChange={onMobileOpenChange}\n\t\t\t\t\tthemeStyle={mobilePortalThemeStyle}\n\t\t\t\t\thistory={history}\n\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\t\t\tonNewSession={onNewSession}\n\t\t\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\t\t\tonSelectSession={(s) => {\n\t\t\t\t\t\tonSelectSession(s);\n\t\t\t\t\t\tonMobileOpenChange(false);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DesktopSidebar\n\t\t\thistory={history}\n\t\t\tactiveSessionId={activeSessionId}\n\t\t\tloadingSessionId={loadingSessionId}\n\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\tonNewSession={onNewSession}\n\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\tonSelectSession={onSelectSession}\n\t\t/>\n\t);\n}\n\n// ============================================\n// Desktop sidebar (resizable + collapsible)\n// ============================================\n\ntype DesktopProps = {\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tshowNewSessionButton: boolean;\n\tonNewSession?: () => void;\n\tnewSessionDisabled?: boolean;\n\tonSelectSession: (session: SessionSummary) => void;\n};\n\nfunction DesktopSidebar({\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\trecentlyCompletedSessionIds,\n\tshowNewSessionButton,\n\tonNewSession,\n\tnewSessionDisabled,\n\tonSelectSession,\n}: DesktopProps) {\n\tconst { width, setWidth, collapsed, setCollapsed, minWidth, maxWidth } = history;\n\tconst reduceMotion = useReducedMotion();\n\n\tconst dragStateRef = useRef<{ startX: number; startWidth: number } | null>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst [handleHover, setHandleHover] = useState(false);\n\n\tconst onResizeStart = useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\tdragStateRef.current = { startX: e.clientX, startWidth: width };\n\t\t\tsetIsDragging(true);\n\t\t},\n\t\t[width],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isDragging) return;\n\t\tconst onMove = (e: PointerEvent) => {\n\t\t\tconst st = dragStateRef.current;\n\t\t\tif (!st) return;\n\t\t\tsetWidth(st.startWidth + (e.clientX - st.startX));\n\t\t};\n\t\tconst onEnd = () => {\n\t\t\tdragStateRef.current = null;\n\t\t\tsetIsDragging(false);\n\t\t};\n\t\twindow.addEventListener(\"pointermove\", onMove);\n\t\twindow.addEventListener(\"pointerup\", onEnd);\n\t\twindow.addEventListener(\"pointercancel\", onEnd);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"pointermove\", onMove);\n\t\t\twindow.removeEventListener(\"pointerup\", onEnd);\n\t\t\twindow.removeEventListener(\"pointercancel\", onEnd);\n\t\t};\n\t}, [isDragging, setWidth]);\n\n\tconst handleActive = handleHover || isDragging;\n\n\t/* Enter-only motion: AnimatePresence+wait left a layout gap and made the main panel flicker. */\n\tconst sidebarEnter =\n\t\treduceMotion\n\t\t\t? { duration: 0.1, ease: \"easeOut\" as const }\n\t\t\t: { duration: 0.16, ease: [0.25, 0.46, 0.45, 0.94] as const };\n\n\tif (collapsed) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tkey=\"payman-sidebar-desktop-collapsed\"\n\t\t\t\tclassName=\"payman-sidebar-collapsed-mount\"\n\t\t\t\tinitial={reduceMotion ? false : { opacity: 0, scale: 0.96 }}\n\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\ttransition={sidebarEnter}\n\t\t\t\tstyle={{ alignSelf: \"flex-start\" }}\n\t\t\t>\n\t\t\t\t<CollapsedButton\n\t\t\t\t\tonExpand={() => setCollapsed(false)}\n\t\t\t\t\thistory={history}\n\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\t\t\tonNewSession={onNewSession}\n\t\t\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t\t/>\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.aside\n\t\t\tkey=\"payman-sidebar-desktop-expanded\"\n\t\t\tclassName=\"payman-sidebar payman-sidebar-desktop\"\n\t\t\tinitial={reduceMotion ? false : { opacity: 0 }}\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\ttransition={sidebarEnter}\n\t\t\tstyle={{\n\t\t\t\twidth,\n\t\t\t\tminWidth,\n\t\t\t\tmaxWidth,\n\t\t\t\theight: \"100%\",\n\t\t\t\tminHeight: 0,\n\t\t\t\talignSelf: \"stretch\",\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\toverflow: \"hidden\",\n\t\t\t\ttransition: isDragging ? \"none\" : \"width 100ms ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<SidebarTopBar\n\t\t\t\tonCollapse={() => setCollapsed(true)}\n\t\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\t\tonNewSession={onNewSession}\n\t\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\t/>\n\t\t\t<SessionList\n\t\t\t\thistory={history}\n\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\trole=\"separator\"\n\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\tonPointerDown={onResizeStart}\n\t\t\t\tonMouseEnter={() => setHandleHover(true)}\n\t\t\t\tonMouseLeave={() => setHandleHover(false)}\n\t\t\t\tclassName=\"payman-sidebar-resize\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tright: -4,\n\t\t\t\t\twidth: 8,\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tcursor: \"col-resize\",\n\t\t\t\t\tuserSelect: \"none\",\n\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\tzIndex: 2,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\taria-hidden\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 3,\n\t\t\t\t\t\theight: 36,\n\t\t\t\t\t\tborderRadius: 999,\n\t\t\t\t\t\tbackground: handleActive\n\t\t\t\t\t\t\t? \"var(--payman-v2-text-3)\"\n\t\t\t\t\t\t\t: \"transparent\",\n\t\t\t\t\t\topacity: handleActive ? 1 : 0,\n\t\t\t\t\t\ttransition: \"opacity 100ms ease, background 100ms ease\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</motion.aside>\n\t);\n}\n\n// ============================================\n// Collapsed button (single expand button + hover popover)\n// ============================================\n\n/** Leave delay ≥ popover exit so AnimatePresence can finish. */\nconst POPOVER_LEAVE_DELAY_MS = 220;\n\nfunction CollapsedButton({\n\tonExpand,\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\trecentlyCompletedSessionIds,\n\tshowNewSessionButton,\n\tonNewSession,\n\tnewSessionDisabled,\n\tonSelectSession,\n}: {\n\tonExpand: () => void;\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tshowNewSessionButton: boolean;\n\tonNewSession?: () => void;\n\tnewSessionDisabled?: boolean;\n\tonSelectSession: (session: SessionSummary) => void;\n}) {\n\tconst reduceMotion = useReducedMotion();\n\tconst [hoverOpen, setHoverOpen] = useState(false);\n\tconst leaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst openPopover = () => {\n\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\tsetHoverOpen(true);\n\t};\n\tconst schedulePopoverClose = () => {\n\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\tleaveTimerRef.current = setTimeout(\n\t\t\t() => setHoverOpen(false),\n\t\t\tPOPOVER_LEAVE_DELAY_MS,\n\t\t);\n\t};\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (leaveTimerRef.current) clearTimeout(leaveTimerRef.current);\n\t\t},\n\t\t[],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"payman-sidebar-collapsed\"\n\t\t\tonMouseEnter={openPopover}\n\t\t\tonMouseLeave={schedulePopoverClose}\n\t\t\tstyle={{ position: \"relative\", alignSelf: \"flex-start\" }}\n\t\t>\n\t\t\t<motion.button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label=\"Expand sidebar\"\n\t\t\t\ttitle=\"Expand sidebar\"\n\t\t\t\tonClick={onExpand}\n\t\t\t\tclassName=\"payman-sidebar-collapsed-button\"\n\t\t\t\twhileHover={reduceMotion ? undefined : { scale: 1.04 }}\n\t\t\t\twhileTap={reduceMotion ? undefined : { scale: 0.97 }}\n\t\t\t\ttransition={{ type: \"spring\", stiffness: 620, damping: 32 }}\n\t\t\t>\n\t\t\t\t<PanelLeftOpen size={16} />\n\t\t\t</motion.button>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{hoverOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey=\"payman-sidebar-hover-popover\"\n\t\t\t\t\t\tclassName=\"payman-sidebar-popover\"\n\t\t\t\t\t\tonMouseEnter={openPopover}\n\t\t\t\t\t\tonMouseLeave={schedulePopoverClose}\n\t\t\t\t\t\tinitial={\n\t\t\t\t\t\t\treduceMotion ? { opacity: 0 } : { opacity: 0, x: -6, scale: 0.98 }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimate={reduceMotion ? { opacity: 1 } : { opacity: 1, x: 0, scale: 1 }}\n\t\t\t\t\t\texit={\n\t\t\t\t\t\t\treduceMotion ? { opacity: 0 } : { opacity: 0, x: -4, scale: 0.99 }\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransition={\n\t\t\t\t\t\t\treduceMotion\n\t\t\t\t\t\t\t\t? { duration: 0.08 }\n\t\t\t\t\t\t\t\t: { duration: 0.14, ease: [0.25, 0.46, 0.45, 0.94] }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: \"calc(100% + 6px)\",\n\t\t\t\t\t\t\ttop: 6,\n\t\t\t\t\t\t\twidth: Math.min(history.width, 320),\n\t\t\t\t\t\t\tmaxHeight: 480,\n\t\t\t\t\t\t\tzIndex: 50,\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\ttransformOrigin: \"left center\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<SidebarTopBar\n\t\t\t\t\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\t\t\t\t\tonNewSession={onNewSession}\n\t\t\t\t\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SessionList\n\t\t\t\t\t\t\thistory={history}\n\t\t\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\t\t\tonSelectSession={(s) => {\n\t\t\t\t\t\t\t\tonSelectSession(s);\n\t\t\t\t\t\t\t\tsetHoverOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\n\n// ============================================\n// Mobile drawer\n// ============================================\n\ntype MobileProps = {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tthemeStyle: PortalThemeStyle;\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tshowNewSessionButton: boolean;\n\tonNewSession?: () => void;\n\tnewSessionDisabled?: boolean;\n\tonSelectSession: (session: SessionSummary) => void;\n};\n\nfunction MobileDrawer({\n\topen,\n\tonOpenChange,\n\tthemeStyle,\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\trecentlyCompletedSessionIds,\n\tshowNewSessionButton,\n\tonNewSession,\n\tnewSessionDisabled,\n\tonSelectSession,\n}: MobileProps) {\n\tconst handleNewSession = onNewSession\n\t\t? () => {\n\t\t\t\tonOpenChange(false);\n\t\t\t\tonNewSession();\n\t\t\t}\n\t\t: undefined;\n\n\tif (!open || typeof document === \"undefined\") return null;\n\treturn createPortal(\n\t\t<motion.div\n\t\t\tclassName=\"payman-sidebar-backdrop\"\n\t\t\tonClick={() => onOpenChange(false)}\n\t\t\tstyle={themeStyle as CSSProperties}\n\t\t\tinitial={{ opacity: 0 }}\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\ttransition={{ duration: 0.18, ease: \"easeOut\" }}\n\t\t>\n\t\t\t<motion.aside\n\t\t\t\tclassName=\"payman-sidebar payman-sidebar-sheet\"\n\t\t\t\tdata-open=\"true\"\n\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label=\"Recent sessions\"\n\t\t\t\tinitial={{ y: 28, opacity: 0.96 }}\n\t\t\t\tanimate={{ y: 0, opacity: 1 }}\n\t\t\t\ttransition={{\n\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\tstiffness: 380,\n\t\t\t\t\tdamping: 32,\n\t\t\t\t\tmass: 0.92,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"payman-sidebar-sheet-grabber\" aria-hidden />\n\t\t\t\t<SidebarTopBar\n\t\t\t\t\tonCollapse={() => onOpenChange(false)}\n\t\t\t\t\tmobile\n\t\t\t\t\tshowNewSessionButton={showNewSessionButton}\n\t\t\t\t\tonNewSession={handleNewSession}\n\t\t\t\t\tnewSessionDisabled={newSessionDisabled}\n\t\t\t\t/>\n\t\t\t\t<SessionList\n\t\t\t\t\thistory={history}\n\t\t\t\t\tactiveSessionId={activeSessionId}\n\t\t\t\t\tloadingSessionId={loadingSessionId}\n\t\t\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\t\t\tonSelectSession={onSelectSession}\n\t\t\t\t/>\n\t\t\t</motion.aside>\n\t\t</motion.div>,\n\t\tdocument.body,\n\t);\n}\n\n// ============================================\n// Shared pieces\n// ============================================\n\ntype SessionDateGroup = {\n\tkey: string;\n\tlabel: string;\n\tsessions: SessionSummary[];\n};\n\nfunction SidebarTopBar({\n\tonCollapse,\n\tmobile = false,\n\tshowNewSessionButton = false,\n\tonNewSession,\n\tnewSessionDisabled = false,\n}: {\n\tonCollapse?: () => void;\n\tmobile?: boolean;\n\tshowNewSessionButton?: boolean;\n\tonNewSession?: () => void;\n\tnewSessionDisabled?: boolean;\n}) {\n\tconst shouldShowNewSession = showNewSessionButton && onNewSession != null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-sidebar-topbar\",\n\t\t\t\tshouldShowNewSession && \"has-new-session\",\n\t\t\t)}\n\t\t>\n\t\t\t<SidebarHeader onCollapse={onCollapse} mobile={mobile} />\n\t\t\t{shouldShowNewSession && (\n\t\t\t\t<div className=\"payman-sidebar-new-session-wrap\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-sidebar-new-session-button\"\n\t\t\t\t\t\tonClick={onNewSession}\n\t\t\t\t\t\tdisabled={newSessionDisabled}\n\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus size={13} strokeWidth={2.4} />\n\t\t\t\t\t\t<span>New Session</span>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction SidebarHeader({\n\tonCollapse,\n\tmobile = false,\n}: {\n\tonCollapse?: () => void;\n\tmobile?: boolean;\n}) {\n\treturn (\n\t\t<div className=\"payman-sidebar-header\">\n\t\t\t<span className=\"payman-sidebar-header-title\">Recent sessions</span>\n\t\t\t{onCollapse && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={mobile ? \"Close recent sessions\" : \"Collapse sidebar\"}\n\t\t\t\t\ttitle={mobile ? \"Close recent sessions\" : \"Collapse sidebar\"}\n\t\t\t\t\tonClick={onCollapse}\n\t\t\t\t\tclassName=\"payman-sidebar-header-icon-button\"\n\t\t\t\t>\n\t\t\t\t\t{mobile ? <X size={15} /> : <PanelLeftClose size={13} />}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction SessionList({\n\thistory,\n\tactiveSessionId,\n\tloadingSessionId,\n\trecentlyCompletedSessionIds,\n\tonSelectSession,\n}: {\n\thistory: ReturnType<typeof useSessionHistory>;\n\tactiveSessionId?: string;\n\tloadingSessionId?: string;\n\trecentlyCompletedSessionIds?: ReadonlySet<string>;\n\tonSelectSession: (session: SessionSummary) => void;\n}) {\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst { sessions, hasNext, isLoading, error, loadMore, isReady, refresh } =\n\t\thistory;\n\n\tconst formattedNow = useMemo(() => new Date(), []);\n\tconst sessionGroups = useMemo(\n\t\t() => groupSessionsByDate(sessions, formattedNow),\n\t\t[sessions, formattedNow],\n\t);\n\n\tif (!isReady) {\n\t\treturn (\n\t\t\t<div className=\"payman-sidebar-notice-shell\">\n\t\t\t\t<div className=\"payman-sidebar-notice\">\n\t\t\t\t\tConfigure the chat settings.\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={listRef}\n\t\t\tclassName=\"payman-sidebar-list\"\n\t\t\tstyle={{ flex: \"1 1 0%\", minHeight: 0, overflowY: \"auto\" }}\n\t\t>\n\t\t\t{error && sessions.length === 0 && (\n\t\t\t\t<ErrorState onRetry={() => void refresh()} />\n\t\t\t)}\n\t\t\t{!error && sessions.length === 0 && isLoading && (\n\t\t\t\t<div className=\"payman-sidebar-loading\">\n\t\t\t\t\t<Spinner size={18} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!error && sessions.length === 0 && !isLoading && <EmptyState />}\n\t\t\t{sessionGroups.map((group) => (\n\t\t\t\t<section\n\t\t\t\t\tkey={group.key}\n\t\t\t\t\tclassName=\"payman-sidebar-group\"\n\t\t\t\t\taria-label={group.label}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-sidebar-group-label\">{group.label}</div>\n\t\t\t\t\t<div className=\"payman-sidebar-group-items\">\n\t\t\t\t\t\t{group.sessions.map((s) => (\n\t\t\t\t\t\t\t<SessionRow\n\t\t\t\t\t\t\t\tkey={s.sessionId}\n\t\t\t\t\t\t\t\tsession={s}\n\t\t\t\t\t\t\t\tisActive={s.sessionId === activeSessionId}\n\t\t\t\t\t\t\t\tisLoading={s.sessionId === loadingSessionId}\n\t\t\t\t\t\t\t\tisRecentlyCompleted={\n\t\t\t\t\t\t\t\t\trecentlyCompletedSessionIds?.has(s.sessionId) ?? false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonSelect={onSelectSession}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t))}\n\t\t\t{sessions.length > 0 && hasNext && (\n\t\t\t\t<LoadMoreButton\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tonClick={() => void loadMore()}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{sessions.length > 0 && error && (\n\t\t\t\t<LoadMoreButton\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\tlabel=\"Retry\"\n\t\t\t\t\tonClick={() => void refresh()}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction SessionRow({\n\tsession,\n\tisActive,\n\tisLoading,\n\tisRecentlyCompleted,\n\tonSelect,\n}: {\n\tsession: SessionSummary;\n\tisActive: boolean;\n\tisLoading: boolean;\n\tisRecentlyCompleted: boolean;\n\tonSelect: (s: SessionSummary) => void;\n}) {\n\t// \"Just completed\" check takes precedence over the conversations-loading spinner.\n\tlet statusNode: React.ReactNode = null;\n\tlet statusLabel: string | undefined;\n\tif (isRecentlyCompleted) {\n\t\tstatusNode = (\n\t\t\t<span\n\t\t\t\tclassName=\"payman-sidebar-row-status payman-sidebar-row-status-done\"\n\t\t\t\taria-hidden\n\t\t\t>\n\t\t\t\t<Check size={11} strokeWidth={2.5} />\n\t\t\t</span>\n\t\t);\n\t\tstatusLabel = \"Just finished\";\n\t} else if (isLoading) {\n\t\tstatusNode = (\n\t\t\t<span aria-hidden className=\"payman-sidebar-row-spinner\" />\n\t\t);\n\t\tstatusLabel = \"Loading\";\n\t}\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={() => onSelect(session)}\n\t\t\tclassName={cn(\"payman-sidebar-row\", isActive && \"is-active\")}\n\t\t\ttitle={\n\t\t\t\tstatusLabel\n\t\t\t\t\t? `${session.sessionTitle || \"Untitled session\"} — ${statusLabel}`\n\t\t\t\t\t: session.sessionTitle\n\t\t\t}\n\t\t\taria-busy={isLoading || undefined}\n\t\t>\n\t\t\t<span className=\"payman-sidebar-row-main\">\n\t\t\t\t<span className=\"payman-sidebar-row-title\">\n\t\t\t\t\t{session.sessionTitle || \"Untitled session\"}\n\t\t\t\t</span>\n\t\t\t\t{statusNode}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n\nfunction EmptyState() {\n\treturn (\n\t\t<div className=\"payman-sidebar-empty\">\n\t\t\t<div className=\"payman-sidebar-empty-icon\" aria-hidden>\n\t\t\t\t<MessageSquare size={18} />\n\t\t\t</div>\n\t\t\t<div className=\"payman-sidebar-empty-title\">No sessions yet</div>\n\t\t\t<div className=\"payman-sidebar-empty-desc\">\n\t\t\t\tYour conversations will appear here once you start chatting.\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction ErrorState({ onRetry }: { onRetry: () => void }) {\n\treturn (\n\t\t<div className=\"payman-sidebar-error\">\n\t\t\t<div className=\"payman-sidebar-error-icon\" aria-hidden>\n\t\t\t\t<AlertCircle size={18} />\n\t\t\t</div>\n\t\t\t<div className=\"payman-sidebar-error-title\">Couldn't load sessions</div>\n\t\t\t<div className=\"payman-sidebar-error-desc\">\n\t\t\t\tCheck your connection and try again.\n\t\t\t</div>\n\t\t\t<LoadMoreButton\n\t\t\t\tisLoading={false}\n\t\t\t\tlabel=\"Try again\"\n\t\t\t\ticon={<RotateCcw size={12} />}\n\t\t\t\tonClick={onRetry}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction LoadMoreButton({\n\tisLoading,\n\tonClick,\n\tlabel,\n\ticon,\n}: {\n\tisLoading: boolean;\n\tonClick: () => void;\n\tlabel?: string;\n\ticon?: React.ReactNode;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName=\"payman-sidebar-load-more\"\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<Spinner />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{icon}\n\t\t\t\t\t<span>{label ?? \"Load more sessions\"}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</button>\n\t);\n}\n\nfunction Spinner({ size = 12 }: { size?: number }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden\n\t\t\tclassName=\"payman-sidebar-spinner\"\n\t\t\tstyle={{\n\t\t\t\twidth: size,\n\t\t\t\theight: size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tborder: `${Math.max(1.5, size / 8)}px solid var(--payman-v2-border-1)`,\n\t\t\t\tborderTopColor: \"var(--payman-v2-text-2)\",\n\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\tanimation: \"payman-v2-spin 0.7s linear infinite\",\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction groupSessionsByDate(\n\tsessions: SessionSummary[],\n\tnow: Date,\n): SessionDateGroup[] {\n\tconst groups = new Map<string, SessionDateGroup>();\n\tconst orderedGroups: SessionDateGroup[] = [];\n\n\tfor (const session of sessions) {\n\t\tconst bucket = getSessionDateBucket(session.lastMessageAt, now);\n\t\tconst existing = groups.get(bucket.key);\n\n\t\tif (existing) {\n\t\t\texisting.sessions.push(session);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst group: SessionDateGroup = {\n\t\t\tkey: bucket.key,\n\t\t\tlabel: bucket.label,\n\t\t\tsessions: [session],\n\t\t};\n\n\t\tgroups.set(bucket.key, group);\n\t\torderedGroups.push(group);\n\t}\n\n\treturn orderedGroups;\n}\n\n/** First letter of each letter-run upper, rest lower (locale-aware chars). */\nfunction titleCaseDateHeading(label: string): string {\n\treturn label.replace(/[\\p{L}\\p{M}]+/gu, (word) => {\n\t\tconst lower = word.toLocaleLowerCase(undefined);\n\t\tconst first = lower.charAt(0).toLocaleUpperCase(undefined);\n\t\treturn first + lower.slice(1);\n\t});\n}\n\nfunction getSessionDateBucket(\n\tiso: string,\n\tnow: Date,\n): Pick<SessionDateGroup, \"key\" | \"label\"> {\n\tconst date = new Date(iso);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn { key: \"older\", label: titleCaseDateHeading(\"Older\") };\n\t}\n\n\tconst dayKey = [\n\t\tdate.getFullYear(),\n\t\tString(date.getMonth() + 1).padStart(2, \"0\"),\n\t\tString(date.getDate()).padStart(2, \"0\"),\n\t].join(\"-\");\n\n\tconst sessionDay = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\tconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\tconst dayDiff = Math.round(\n\t\t(today.getTime() - sessionDay.getTime()) / 86_400_000,\n\t);\n\n\tif (dayDiff <= 0) return { key: dayKey, label: titleCaseDateHeading(\"Today\") };\n\tif (dayDiff === 1) return { key: dayKey, label: titleCaseDateHeading(\"Yesterday\") };\n\tif (dayDiff < 7) {\n\t\treturn {\n\t\t\tkey: dayKey,\n\t\t\tlabel: titleCaseDateHeading(\n\t\t\t\tdate.toLocaleDateString(undefined, { weekday: \"long\" }),\n\t\t\t),\n\t\t};\n\t}\n\n\tconst sameYear = date.getFullYear() === now.getFullYear();\n\treturn {\n\t\tkey: dayKey,\n\t\tlabel: titleCaseDateHeading(\n\t\t\tdate.toLocaleDateString(undefined, {\n\t\t\t\tmonth: \"long\",\n\t\t\t\tday: \"numeric\",\n\t\t\t\tyear: sameYear ? undefined : \"numeric\",\n\t\t\t}),\n\t\t),\n\t};\n}\n","import { useState } from \"react\";\nimport { Clipboard, Pressable, StyleSheet, Text, View } from \"react-native\";\nimport type { ChatHeaderProps } from \"../../types\";\n\nexport function ChatHeader({\n\tsessionId,\n\tonCopySessionId,\n\tonNewSession,\n\tshowResetSession = false,\n\tchildren,\n}: ChatHeaderProps) {\n\tconst [copiedSessionId, setCopiedSessionId] = useState(false);\n\n\tconst handleCopySessionId = () => {\n\t\tif (sessionId && onCopySessionId) {\n\t\t\tClipboard.setString(sessionId);\n\t\t\tsetCopiedSessionId(true);\n\t\t\tsetTimeout(() => setCopiedSessionId(false), 2000);\n\t\t\tonCopySessionId(sessionId);\n\t\t}\n\t};\n\n\treturn (\n\t\t<View style={styles.container}>\n\t\t\t<View style={styles.left}>\n\t\t\t\t<Text style={styles.title}>Chat</Text>\n\t\t\t\t{sessionId && (\n\t\t\t\t\t<Pressable onPress={handleCopySessionId} style={styles.sessionChip}>\n\t\t\t\t\t\t<Text style={styles.sessionText}>\n\t\t\t\t\t\t\t{sessionId.length > 20\n\t\t\t\t\t\t\t\t? `${sessionId.substring(0, 8)}…${sessionId.slice(-8)}`\n\t\t\t\t\t\t\t\t: sessionId}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{copiedSessionId ? (\n\t\t\t\t\t\t\t<Text style={styles.copyHint}>copied</Text>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Text style={styles.copyHint}>copy</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t\t<View style={styles.right}>\n\t\t\t\t{showResetSession && onNewSession && (\n\t\t\t\t\t<Pressable onPress={onNewSession} style={styles.btn}>\n\t\t\t\t\t\t<Text style={styles.btnText}>Reset</Text>\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tpaddingHorizontal: 16,\n\t\theight: 56,\n\t\tborderBottomWidth: 1,\n\t\tborderBottomColor: \"rgba(0,0,0,0.08)\",\n\t\tbackgroundColor: \"rgba(255,255,255,0.85)\",\n\t},\n\tleft: { flex: 1, minWidth: 0 },\n\tright: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n\ttitle: { fontSize: 14, fontWeight: \"600\", color: \"#111\" },\n\tsessionChip: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tmarginTop: 2,\n\t},\n\tsessionText: { fontSize: 10, color: \"#666\", fontFamily: \"Menlo\" },\n\tcopyHint: { fontSize: 9, color: \"#999\" },\n\tbtn: {\n\t\tpaddingHorizontal: 10,\n\t\tpaddingVertical: 6,\n\t\tborderRadius: 8,\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.12)\",\n\t},\n\tbtnText: { fontSize: 12, color: \"#555\" },\n});\n","import { X } from \"lucide-react-native\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tActivityIndicator,\n\tDimensions,\n\tImage,\n\tKeyboard,\n\tKeyboardAvoidingView,\n\tModal,\n\tPlatform,\n\tPressable,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tMODAL_CONTENT,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n} from \"./constants\";\nimport { formatAmountForDisplay, getOtpSchemaFromRequest } from \"./utils\";\n\n/** Logo / footer brand teal — hero amount & payee use this instead of primary blue */\nconst PAYMAN_BRAND_GREEN = \"#0A3B44\";\n\nconst PAYMAN = {\n\tprimary: \"#00858d\",\n\tprimaryForeground: \"#ffffff\",\n\tforeground: \"#18181b\",\n\tmutedForeground: \"#71717a\",\n\tmutedForegroundLight: \"#a1a1aa\",\n\tborder: \"#e4e4e7\",\n\tcard: \"#ffffff\",\n\tmodalBackdrop: \"rgba(0,0,0,0.4)\",\n} as const;\n\nconst { width: SCREEN_WIDTH } = Dimensions.get(\"window\");\nconst DIALOG_MAX_WIDTH = Math.min(440, SCREEN_WIDTH * 0.94);\nconst DIALOG_PADDING = 28;\nconst OTP_ERROR_FLASH_MS = 600;\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\n\t\t\"approve\" | \"reject\" | \"resend\" | null\n\t>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst [keyboardVisible, setKeyboardVisible] = useState(false);\n\tconst [otpError, setOtpError] = useState(false);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\n\tuseEffect(() => {\n\t\tconst show = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillShow\" : \"keyboardDidShow\",\n\t\t\t() => setKeyboardVisible(true)\n\t\t);\n\t\tconst hide = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillHide\" : \"keyboardDidHide\",\n\t\t\t() => setKeyboardVisible(false)\n\t\t);\n\t\treturn () => {\n\t\t\tshow.remove();\n\t\t\thide.remove();\n\t\t};\n\t}, []);\n\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t\tsetOtpError(false);\n\t\t\tlastAutoSubmittedRef.current = \"\";\n\t\t\tsubmitInFlightRef.current = false;\n\t\t\tsubmitGenerationRef.current += 1;\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\t\tconst timer = setTimeout(\n\t\t\t() => setResendCooldownRemaining((prev) => prev - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — flash red + shake, then clear\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtpError(true);\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tsetOtpError(false);\n\t\t\t\tsetOtp(\"\");\n\t\t\t\tresetActionState();\n\t\t\t}, OTP_ERROR_FLASH_MS);\n\t\t\treturn () => clearTimeout(t);\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\t\tconst timeout = setTimeout(\n\t\t\t() => resetActionState(),\n\t\t\tACTION_PENDING_TIMEOUT_MS\n\t\t);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !userActionRequest) return;\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isSubmitting || submitInFlightRef.current) return;\n\t\tif (lastAutoSubmittedRef.current === otp) return;\n\n\t\tlastAutoSubmittedRef.current = otp;\n\t\tsubmitInFlightRef.current = true;\n\t\tconst submitGeneration = submitGenerationRef.current;\n\n\t\tvoid (async () => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetActionType(\"approve\");\n\t\t\ttry {\n\t\t\t\tawait onApprove(otp);\n\t\t\t} catch {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tresetActionState();\n\t\t\t\tlastAutoSubmittedRef.current = otp;\n\t\t\t} finally {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tsubmitInFlightRef.current = false;\n\t\t\t}\n\t\t})();\n\t}, [\n\t\totp,\n\t\tisOpen,\n\t\tisSubmitting,\n\t\tuserActionRequest,\n\t\tschema.maxLength,\n\t\tonApprove,\n\t\tresetActionState,\n\t]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t} catch {\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!userActionRequest) return null;\n\n\tconst isPayment =\n\t\tuserActionRequest.userActionType === \"PAYMENT_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.amount);\n\tconst isPayee =\n\t\tuserActionRequest.userActionType === \"PAYEE_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.payeeName);\n\n\tconst isVerifying = actionType === \"approve\" && isSubmitting;\n\tconst isCancelling = actionType === \"reject\" && isSubmitting;\n\tconst modalPosition = keyboardVisible ? \"flex-end\" : \"center\";\n\n\treturn (\n\t\t<Modal\n\t\t\tvisible={isOpen}\n\t\t\ttransparent\n\t\t\tanimationType=\"fade\"\n\t\t\tonRequestClose={() => {}}\n\t\t\tstatusBarTranslucent={Platform.OS === \"android\"}\n\t\t>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.keyboardAvoid, { justifyContent: modalPosition }]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 0 : 20}\n\t\t\t>\n\t\t\t\t<View style={[s.modalOverlay, { justifyContent: modalPosition }]}>\n\t\t\t\t\t<ScrollView\n\t\t\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\t\t\ts.scrollContent,\n\t\t\t\t\t\t\t{ justifyContent: modalPosition },\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\t\t\t>\n\t\t\t\t\t<View style={[s.dialog, { width: DIALOG_MAX_WIDTH }]}>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tstyle={s.closeBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Close\"\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X\n\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\tcolor={PAYMAN.mutedForeground}\n\t\t\t\t\t\t\t\tstrokeWidth={2.5}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={s.description}\n\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-desc\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t{isPayment ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Pay</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount ? (\n\t\t\t\t\t\t\t<Text style={s.heroAmount}>\n\t\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Create Payee</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName ? (\n\t\t\t\t\t\t\t<View style={s.heroPayeeWrap}>\n\t\t\t\t\t\t\t\t<Text style={s.heroPayeeName}>\n\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t\t<Text style={s.heroPayeeType}>\n\t\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<View style={s.otpWrap} accessibilityLabel=\"payman-otp-wrap\">\n\t\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t\t<View style={s.verifyingRow}>\n\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN_BRAND_GREEN}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Text style={s.verifyingText}>\n\t\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.linksCol}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleResend}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t(isSubmitting || resendCooldownRemaining > 0) &&\n\t\t\t\t\t\t\t\t\t\t\ts.linkDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND_CODE}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<View style={{ flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6 }}>\n\t\t\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN.mutedForeground}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\tisSubmitting && !isCancelling && s.linkDisabled,\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isCancelling\n\t\t\t\t\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t\t\t\t: isPayee\n\t\t\t\t\t\t\t\t\t\t\t\t? BUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t\t\t\t\t\t: BUTTON_LABELS.CANCEL_TRANSFER}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.footer}>\n\t\t\t\t\t\t\t<Text style={s.footerPrefix}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsource={{ uri: paymanLogoMark }}\n\t\t\t\t\t\t\t\tstyle={s.footerLogo}\n\t\t\t\t\t\t\t\tresizeMode=\"contain\"\n\t\t\t\t\t\t\t\taccessibilityElementsHidden\n\t\t\t\t\t\t\t\timportantForAccessibility=\"no-hide-descendants\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text style={s.footerBrand}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t</ScrollView>\n\t\t\t\t</View>\n\t\t\t</KeyboardAvoidingView>\n\t\t</Modal>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tkeyboardAvoid: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t},\n\tmodalOverlay: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t\tbackgroundColor: PAYMAN.modalBackdrop,\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 24,\n\t},\n\tscrollContent: {\n\t\tflexGrow: 1,\n\t\twidth: \"100%\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t},\n\tdialog: {\n\t\tposition: \"relative\",\n\t\tbackgroundColor: PAYMAN.card,\n\t\tborderRadius: 16,\n\t\tpaddingTop: 36,\n\t\tpaddingHorizontal: DIALOG_PADDING,\n\t\tpaddingBottom: 28,\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN.border,\n\t},\n\tcloseBtn: {\n\t\tposition: \"absolute\",\n\t\tright: 10,\n\t\ttop: 10,\n\t\twidth: 28,\n\t\theight: 28,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 2,\n\t},\n\tdescription: {\n\t\tfontSize: 14,\n\t\tlineHeight: 20,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 20,\n\t\tpaddingHorizontal: 24,\n\t},\n\ttransferLabel: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t\topacity: 0.7,\n\t},\n\theroAmount: {\n\t\tfontSize: 42,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 32,\n\t\tletterSpacing: -0.5,\n\t},\n\theroPayeeWrap: {\n\t\talignItems: \"center\",\n\t\tmarginBottom: 32,\n\t\tgap: 4,\n\t},\n\theroPayeeName: {\n\t\tfontSize: 28,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t},\n\theroPayeeType: {\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\topacity: 0.85,\n\t},\n\totpWrap: {\n\t\tmarginBottom: 30,\n\t},\n\tverifyingRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tmarginTop: 10,\n\t},\n\tverifyingText: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t},\n\tlinksCol: {\n\t\talignItems: \"center\",\n\t\tgap: 12,\n\t\tmarginBottom: 32,\n\t},\n\tlinkText: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.02,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t},\n\tlinkDisabled: {\n\t\topacity: 0.4,\n\t},\n\tfooter: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tflexWrap: \"nowrap\",\n\t\tgap: 6,\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: PAYMAN.border,\n\t\tpaddingTop: 20,\n\t},\n\tfooterPrefix: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\topacity: 0.9,\n\t},\n\tfooterLogo: {\n\t\theight: 18,\n\t\twidth: 18,\n\t},\n\tfooterBrand: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"700\",\n\t\tletterSpacing: 0.3,\n\t\tcolor: \"#0A3B44\",\n\t},\n});\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import * as Sentry from \"@sentry/react\";\n\nexport interface ChatSessionContext {\n\tsessionId?: string;\n\tsessionOwnerId?: string;\n\tworkflowName?: string;\n\texecutionId?: string;\n\tcfRay?: string;\n\troute?: string;\n\tcustomerId?: string;\n\tcustomerEmail?: string;\n}\n\n/**\n * Reports an error to Sentry enriched with chat session context.\n * Tags and context are scoped to this event so they don't leak\n * to unrelated errors.\n *\n * No-op when Sentry is not initialised.\n */\nexport function captureSentryError(\n\terror: Error | string,\n\tcontext: ChatSessionContext\n): void {\n\tif (!Sentry.getClient()) return;\n\n\tconst tags: Record<string, string> = {};\n\tif (context.executionId) tags.executionId = context.executionId;\n\tif (context.sessionId) tags.sessionId = context.sessionId;\n\tif (context.route) tags.route = context.route;\n\tif (context.cfRay) tags.cfRay = context.cfRay;\n\n\tif (context.customerId) tags.customerId = context.customerId;\n\tif (context.customerEmail) tags.customerEmail = context.customerEmail;\n\n\tconst contexts = {\n\t\tchat_session: {\n\t\t\tsessionId: context.sessionId ?? null,\n\t\t\tsessionOwnerId: context.sessionOwnerId ?? null,\n\t\t\texecutionId: context.executionId ?? null,\n\t\t\tworkflowName: context.workflowName ?? null,\n\t\t\tcfRay: context.cfRay ?? null,\n\t\t\tcustomerId: context.customerId ?? null,\n\t\t\tcustomerEmail: context.customerEmail ?? null,\n\t\t},\n\t};\n\n\tif (typeof error === \"string\") {\n\t\tSentry.captureMessage(error, { level: \"error\", tags, contexts });\n\t} else {\n\t\tSentry.captureException(error, { tags, contexts });\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Targeted fetch interceptor for capturing cf-ray headers\n// ---------------------------------------------------------------------------\n\ntype CfRayListener = (cfRay: string) => void;\n\ninterface InterceptorEntry {\n\turlPattern: string;\n\tlistener: CfRayListener;\n}\n\nconst interceptors: Set<InterceptorEntry> = new Set();\nlet originalFetch: typeof globalThis.fetch | null = null;\n\nfunction patchFetch(): void {\n\tif (originalFetch !== null) return;\n\tif (typeof globalThis === \"undefined\" || typeof globalThis.fetch !== \"function\")\n\t\treturn;\n\n\toriginalFetch = globalThis.fetch;\n\n\tglobalThis.fetch = async function (\n\t\tthis: typeof globalThis,\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit\n\t): Promise<Response> {\n\t\tconst response = await originalFetch!.call(this, input, init);\n\n\t\tif (interceptors.size > 0) {\n\t\t\tconst url =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? input\n\t\t\t\t\t: input instanceof URL\n\t\t\t\t\t\t? input.href\n\t\t\t\t\t\t: (input as Request).url;\n\n\t\t\ttry {\n\t\t\t\tconst cfRay = response.headers.get(\"cf-ray\");\n\t\t\t\tif (cfRay) {\n\t\t\t\t\tfor (const entry of interceptors) {\n\t\t\t\t\t\tif (url.includes(entry.urlPattern)) {\n\t\t\t\t\t\t\tentry.listener(cfRay);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// headers may be inaccessible on opaque responses\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t};\n}\n\nfunction maybeUnpatchFetch(): void {\n\tif (interceptors.size > 0 || originalFetch === null) return;\n\tglobalThis.fetch = originalFetch;\n\toriginalFetch = null;\n}\n\n/**\n * Registers a listener that receives the `cf-ray` header value whenever a\n * fetch response URL contains `urlPattern`.\n *\n * Returns an unsubscribe function (call on unmount).\n */\nexport function subscribeToCfRay(\n\turlPattern: string,\n\tlistener: CfRayListener\n): () => void {\n\tconst entry: InterceptorEntry = { urlPattern, listener };\n\tpatchFetch();\n\tinterceptors.add(entry);\n\treturn () => {\n\t\tinterceptors.delete(entry);\n\t\tmaybeUnpatchFetch();\n\t};\n}\n","import { useState } from \"react\";\nimport { MessageCircle, X, ChevronDown } from \"lucide-react\";\nimport { PaymanChat } from \"../PaymanChat\";\nimport type { ChatConfig, ChatCallbacks } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport interface FloatingChatProps {\n\tconfig: ChatConfig;\n\tcallbacks?: ChatCallbacks;\n\tbuttonPosition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\tbuttonSize?: \"sm\" | \"md\" | \"lg\";\n\tbuttonColor?: string;\n\tbuttonIcon?: React.ReactNode;\n\tbuttonIconUrl?: string;\n\twindowWidth?: string | number;\n\twindowHeight?: string | number;\n\theaderTitle?: string;\n\theaderSubtitle?: string;\n\theaderAvatar?: string;\n\theaderColor?: string;\n\tdefaultOpen?: boolean;\n\tshowNotificationBadge?: boolean;\n}\n\nexport function FloatingChat({\n\tconfig,\n\tcallbacks = {},\n\tbuttonPosition = \"bottom-right\",\n\tbuttonSize = \"md\",\n\tbuttonColor,\n\tbuttonIcon,\n\tbuttonIconUrl,\n\twindowWidth = 380,\n\twindowHeight = 560,\n\theaderTitle = \"AI Assistant\",\n\theaderSubtitle = \"Online • Ready to help\",\n\theaderAvatar = \"🤖\",\n\theaderColor,\n\tdefaultOpen = false,\n\tshowNotificationBadge = false,\n}: FloatingChatProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\tconst toggleChat = () => setIsOpen(!isOpen);\n\n\tconst buttonSizes = { sm: \"w-12 h-12\", md: \"w-14 h-14\", lg: \"w-16 h-16\" };\n\tconst iconSizes = { sm: \"w-5 h-5\", md: \"w-6 h-6\", lg: \"w-7 h-7\" };\n\n\tconst positions = {\n\t\t\"bottom-right\": \"bottom-5 right-5\",\n\t\t\"bottom-left\": \"bottom-5 left-5\",\n\t\t\"top-right\": \"top-5 right-5\",\n\t\t\"top-left\": \"top-5 left-5\",\n\t};\n\n\tconst windowPositions = {\n\t\t\"bottom-right\": \"bottom-[5.5rem] right-5\",\n\t\t\"bottom-left\": \"bottom-[5.5rem] left-5\",\n\t\t\"top-right\": \"top-[5.5rem] right-5\",\n\t\t\"top-left\": \"top-[5.5rem] left-5\",\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{/* Floating Button */}\n\t\t\t<button\n\t\t\t\tonClick={toggleChat}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed z-[9999] rounded-full shadow-lg\",\n\t\t\t\t\t\"flex items-center justify-center cursor-pointer border-0 outline-none\",\n\t\t\t\t\t\"hover:scale-105 active:scale-95 transition-transform duration-200\",\n\t\t\t\t\tbuttonSizes[buttonSize],\n\t\t\t\t\tpositions[buttonPosition],\n\t\t\t\t\t!buttonColor && \"bg-foreground text-background\",\n\t\t\t\t)}\n\t\t\t\tstyle={buttonColor ? { background: buttonColor, color: \"#fff\" } : undefined}\n\t\t\t\taria-label={isOpen ? \"Close chat\" : \"Open chat\"}\n\t\t\t>\n\t\t\t\t{showNotificationBadge && !isOpen && (\n\t\t\t\t\t<span className=\"absolute -top-0.5 -right-0.5 w-3 h-3 bg-red-500 rounded-full border-2 border-background\" />\n\t\t\t\t)}\n\t\t\t\t{buttonIcon ? (\n\t\t\t\t\tbuttonIcon\n\t\t\t\t) : buttonIconUrl ? (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={buttonIconUrl}\n\t\t\t\t\t\talt=\"Chat\"\n\t\t\t\t\t\tclassName={cn(\"object-contain\", iconSizes[buttonSize])}\n\t\t\t\t\t/>\n\t\t\t\t) : isOpen ? (\n\t\t\t\t\t<X className={cn(iconSizes[buttonSize])} />\n\t\t\t\t) : (\n\t\t\t\t\t<MessageCircle className={cn(iconSizes[buttonSize])} />\n\t\t\t\t)}\n\t\t\t</button>\n\n\t\t\t{/* Chat Window */}\n\t\t\t{isOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed z-[9998] bg-card rounded-2xl shadow-2xl overflow-hidden flex flex-col\",\n\t\t\t\t\t\t\"border border-border/60\",\n\t\t\t\t\t\t\"animate-fade-in-up\",\n\t\t\t\t\t\twindowPositions[buttonPosition],\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: typeof windowWidth === \"number\" ? `${windowWidth}px` : windowWidth,\n\t\t\t\t\t\theight: typeof windowHeight === \"number\" ? `${windowHeight}px` : windowHeight,\n\t\t\t\t\t\tmaxWidth: \"calc(100vw - 40px)\",\n\t\t\t\t\t\tmaxHeight: \"calc(100vh - 120px)\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"px-4 py-3 flex items-center justify-between shrink-0\",\n\t\t\t\t\t\t\t!headerColor && \"bg-foreground text-background\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={headerColor ? { background: headerColor, color: \"#fff\" } : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex items-center gap-3 min-w-0\">\n\t\t\t\t\t\t\t<div className=\"w-9 h-9 rounded-xl bg-white/15 flex items-center justify-center text-lg shrink-0\">\n\t\t\t\t\t\t\t\t{headerAvatar}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t\t<h3 className=\"font-semibold text-sm leading-tight truncate\">\n\t\t\t\t\t\t\t\t\t{headerTitle}\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t<p className=\"text-[11px] opacity-70 leading-tight truncate\">\n\t\t\t\t\t\t\t\t\t{headerSubtitle}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={toggleChat}\n\t\t\t\t\t\t\tclassName=\"w-8 h-8 rounded-lg hover:bg-white/10 flex items-center justify-center transition-colors shrink-0\"\n\t\t\t\t\t\t\taria-label=\"Minimize chat\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronDown className=\"w-4 h-4\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Chat Body */}\n\t\t\t\t\t<div className=\"flex-1 overflow-hidden\">\n\t\t\t\t\t\t<PaymanChat\n\t\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\t\tcallbacks={callbacks}\n\t\t\t\t\t\t\tclassName=\"h-full border-0 rounded-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}","import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/** Clear all messages and reset the chat. */\n\tresetSession: () => void;\n\t/** Clear all messages without resetting the session id. */\n\tclearMessages: () => void;\n\t/** Prepend older messages (history pagination). */\n\tprependMessages: (messages: MessageDisplay[]) => void;\n\t/** Cancel the active stream. */\n\tcancelStream: () => void;\n\t/** Current session id, if any. */\n\tgetSessionId: () => string | undefined;\n\t/** All current messages. */\n\tgetMessages: () => MessageDisplay[];\n\t/**\n\t * Replace the active chat with a prior session's conversation history.\n\t * Same call the built-in sidebar uses; exposed for advanced consumers.\n\t */\n\tloadSession: (sessionId: string) => Promise<void>;\n\t/** Whether a stream is currently in flight. */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<PaymanChatContextValue | undefined>(undefined);\n\n/**\n * Access PaymanChat controls from a child of `<PaymanChat>`.\n *\n * @example\n * ```tsx\n * const chat = usePaymanChat();\n * chat.loadSession(sessionId);\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst ctx = useContext(PaymanChatContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn ctx;\n}\n","/**\n * Format an ISO timestamp as a human-friendly relative label:\n * \"just now\" / \"Nm ago\" / \"Nh ago\" / \"Yesterday\" / \"<day>\" (this week) / \"Mon D\" / \"Mon D, YYYY\"\n *\n * No dayjs / date-fns — deliberately ~0 bytes extra.\n */\nexport function formatRelativeTime(iso: string, now: Date = new Date()): string {\n\tconst then = new Date(iso);\n\tif (Number.isNaN(then.getTime())) return \"\";\n\n\tconst diffMs = now.getTime() - then.getTime();\n\tconst diffSec = Math.round(diffMs / 1000);\n\tconst diffMin = Math.round(diffMs / 60_000);\n\tconst diffHour = Math.round(diffMs / 3_600_000);\n\n\tif (diffSec < 45) return \"just now\";\n\tif (diffMin < 60) return `${diffMin}m ago`;\n\tif (diffHour < 24) return `${diffHour}h ago`;\n\n\tconst thenDate = new Date(then.getFullYear(), then.getMonth(), then.getDate());\n\tconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\tconst dayDiff = Math.round(\n\t\t(today.getTime() - thenDate.getTime()) / 86_400_000,\n\t);\n\n\tif (dayDiff === 1) return \"Yesterday\";\n\tif (dayDiff < 7) {\n\t\treturn then.toLocaleDateString(undefined, { weekday: \"short\" });\n\t}\n\n\tconst sameYear = then.getFullYear() === now.getFullYear();\n\treturn then.toLocaleDateString(undefined, {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: sameYear ? undefined : \"numeric\",\n\t});\n}\n"]}
|