@paymanai/payman-ask-sdk 2.0.2 → 2.0.4
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 +10 -9
- package/dist/index.d.ts +10 -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 +163 -65
- 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.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/utils/errorMessages.ts","../src/utils/sentry.ts","../src/components/ResetSessionConfirmModal/index.tsx","../src/components/v2/ActionTooltipV2.tsx","../src/components/v2/UserMessageV2.tsx","../src/components/v2/MarkdownImageV2.tsx","../src/components/v2/MarkdownRendererV2.tsx","../src/components/v2/PaymanMark.tsx","../src/components/v2/ThinkingBlockV2.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.tsx","../src/components/v2/OtpInputV2.tsx","../src/components/v2/VerificationCardV2.tsx","../src/components/v2/MessageListV2.tsx","../src/components/v2/ChatInputV2.tsx","../src/components/v2/ImageLightboxV2.tsx","../src/hooks/useSessionHistory.ts","../src/components/SessionHistorySidebar/index.tsx","../src/components/PaymanChat/index.tsx","../src/components/ChatHeader/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/FloatingChat/index.tsx","../src/utils/relativeTime.ts"],"names":["createContext","useContext","twMerge","clsx","Sentry","init","Sentry2","useCallback","useEffect","jsx","AnimatePresence","jsxs","motion","useState","useRef","createPortal","Check","AlertCircle","Fragment","Copy","Pencil","RotateCcw","useMemo","Loader2","ImageOff","Eye","ReactMarkdown","remarkGfm","interpolate","ChevronRight","buildFormattedThinking","conflictErrorMessage","WifiOff","SearchCode","ShieldCheck","forwardRef","MessageListV2","useImperativeHandle","ArrowDown","ChatInputV2","X","Plus","ImagePlus","Paperclip","Mic","ArrowUp","Download","listSessions","PanelBottomOpen","PanelLeftOpen","PanelLeftClose","MessageSquare","MOBILE_BREAKPOINT","PaymanChat","useChatV2","useVoice","EmptyState","Menu","DEFAULT_MAX_LENGTH","MAX_SUPPORTED_LENGTH","AUTO_FOCUS_DELAY_MS","MessageCircle","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,IAAM,iBAAA,GAAoBA,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,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;;;ACLO,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,CAAQC,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;AAaA,IAAM,YAAA,uBAA0C,GAAA,EAAI;AACpD,IAAI,aAAA,GAAgD,IAAA;AAEpD,SAAS,UAAA,GAAmB;AAC3B,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC5B,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,OAAO,WAAW,KAAA,KAAU,UAAA;AACpE,IAAA;AAED,EAAA,aAAA,GAAgB,UAAA,CAAW,KAAA;AAE3B,EAAA,UAAA,CAAW,KAAA,GAAQ,eAElB,KAAA,EACAC,KAAAA,EACoB;AACpB,IAAA,MAAM,WAAW,MAAM,aAAA,CAAe,IAAA,CAAK,IAAA,EAAM,OAAOA,KAAI,CAAA;AAE5D,IAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,GAAA,GACL,OAAO,KAAA,KAAU,QAAA,GACd,QACA,KAAA,YAAiB,GAAA,GAChB,KAAA,CAAM,IAAA,GACL,KAAA,CAAkB,GAAA;AAExB,MAAA,IAAI;AACH,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,QAAA,IAAI,KAAA,EAAO;AACV,UAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AACjC,YAAA,IAAI,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG;AACnC,cAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,YACrB;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACD;AAEA,IAAA,OAAO,QAAA;AAAA,EACR,CAAA;AACD;AAEA,SAAS,iBAAA,GAA0B;AAClC,EAAA,IAAI,YAAA,CAAa,IAAA,GAAO,CAAA,IAAK,aAAA,KAAkB,IAAA,EAAM;AACrD,EAAA,UAAA,CAAW,KAAA,GAAQ,aAAA;AACnB,EAAA,aAAA,GAAgB,IAAA;AACjB;AAQO,SAAS,gBAAA,CACf,YACA,QAAA,EACa;AACb,EAAA,MAAM,KAAA,GAA0B,EAAE,UAAA,EAAY,QAAA,EAAS;AACvD,EAAA,UAAA,EAAW;AACX,EAAA,YAAA,CAAa,IAAI,KAAK,CAAA;AACtB,EAAA,OAAO,MAAM;AACZ,IAAA,YAAA,CAAa,OAAO,KAAK,CAAA;AACzB,IAAA,iBAAA,EAAkB;AAAA,EACnB,CAAA;AACD;;;ACnIA,IAAM,eAAA,GAAkB,iBAAA;AACxB,IAAM,kBAAA,GAAqB,oBAAA;AAC3B,IAAM,iBAAA,GAAoB,gCAAA;AAOnB,SAAS,wBAAwB,YAAA,EAAgC;AACvE,EAAA,IAAI,CAAC,cAAc,OAAO,KAAA;AAE1B,EAAA,OACC,iBAAiB,eAAA,IACjB,YAAA,KAAiB,kBAAA,IACjB,YAAA,CAAa,SAAS,eAAe,CAAA;AAEvC;AAEA,SAAS,kBAAkB,OAAA,EAA+B;AACzD,EAAA,IAAI;AACH,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAEjC,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC/B,MAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,MAAU,KAAA,CAAA,EAAU;AAAA,IAC9C;AAEA,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,EAAM;AAClD,MAAA,MAAM,MAAA,GAAS,MAAA;AACf,MAAA,OAAO;AAAA,QACN,QACC,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,OAAO,MAAA,GAAS,KAAA,CAAA;AAAA,QACrD,OAAA,EACC,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,IAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK,GACvD,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK,GACpB,KAAA;AAAA,OACL;AAAA,IACD;AAAA,EACD,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,EAAC;AACT;AAEO,SAAS,wBAAwB,YAAA,EAA2C;AAClF,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAE1B,EAAA,MAAM,YAAA,GAAe,aAAa,IAAA,EAAK;AACvC,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,iBAAiB,CAAA;AACtD,EAAA,MAAM,aAAa,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,CAAC,CAAC,CAAA,GAAI,MAAA;AACtD,EAAA,MAAM,cAAc,SAAA,GAAY,SAAA,CAAU,CAAC,CAAA,GAAI,cAAc,IAAA,EAAK;AAClE,EAAA,MAAM,OAAA,GAAU,kBAAkB,UAAU,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AAEjC,EAAA,IAAI,WAAW,GAAA,EAAK;AACnB,IAAA,OAAO,MAAA;AAAA,EACR;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACpB,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,EAChB;AAEA,EAAA,OAAO,UAAA,IAAc,MAAA;AACtB;ACxDO,SAAS,mBAAmB,GAAA,EAAmB;AACrD,EAAA,IAAI,CAAC,GAAA,EAAK;AAGV,EAAA,IAAWC,6BAAU,EAAG;AAExB,EAAOA,iBAAA,CAAA,IAAA,CAAK;AAAA,IACX,GAAA;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,YAAA,EAAc;AAAA,MACb,IAAA,EAAM,EAAE,MAAA,EAAQ,gBAAA;AAAiB;AAClC,GACA,CAAA;AACF;ACZO,SAAS,wBAAA,CAAyB;AAAA,EACxC,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,EAAkC;AACjC,EAAA,MAAM,aAAA,GAAgBC,iBAAA;AAAA,IACrB,CAAC,KAAA,KAAyB;AACzB,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC3B,QAAA,OAAA,EAAQ;AAAA,MACT;AAAA,IACD,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACT;AAEA,EAAAC,eAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,QAAA,KAAa,WAAA,EAAa;AAEhD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAE/B,IAAA,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACrD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAAA,IAChC,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,aAAA,EAAe,MAAM,CAAC,CAAA;AAE1B,EAAA,uBACCC,cAAA,CAACC,gCACC,QAAA,EAAA,MAAA,mBACAC,eAAA;AAAA,IAACC,mBAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACA,SAAA,EAAU,qCAAA;AAAA,MACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,MAC7B,OAAA,EAAS,OAAA;AAAA,MACT,IAAA,EAAK,cAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oCAAA,EAAqC,CAAA;AAAA,wBAEpDE,eAAA;AAAA,UAACC,mBAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,YAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,YACtC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,YACrD,SAAA,EAAU,mCAAA;AAAA,YACV,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,YAC1C,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,iBAAA,EAAgB,4BAAA;AAAA,YAChB,kBAAA,EAAiB,kCAAA;AAAA,YAEjB,QAAA,EAAA;AAAA,8BAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACd,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,aAAA,EAElD,CAAA;AAAA,gCACAA,cAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACA,EAAA,EAAG,4BAAA;AAAA,oBACH,SAAA,EAAU,kCAAA;AAAA,oBACV,QAAA,EAAA;AAAA;AAAA,iBAED;AAAA,gCACAA,cAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACA,EAAA,EAAG,kCAAA;AAAA,oBACH,SAAA,EAAU,wCAAA;AAAA,oBACV,QAAA,EAAA;AAAA;AAAA;AAED,eAAA,EACD,CAAA;AAAA,8BAEAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACd,QAAA,EAAA;AAAA,gCAAAF,cAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACA,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,OAAA;AAAA,oBACT,SAAA,EAAU,yEAAA;AAAA,oBACV,QAAA,EAAA;AAAA;AAAA,iBAED;AAAA,gCACAA,cAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACA,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,SAAA;AAAA,oBACT,SAAA,EAAU,uEAAA;AAAA,oBACV,QAAA,EAAA;AAAA;AAAA;AAED,eAAA,EACD;AAAA;AAAA;AAAA;AACD;AAAA;AAAA,MAEE,IAAA,EACL,CAAA;AAEF;AC9FO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAyB;AAC1E,EAAA,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACDF,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,2BAAA,EACjC,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,sBACDF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B;AAAA,KAAA,EAC1C,CAAA,EACD;AAAA,GAAA,EACD,CAAA;AAEF;ACSA,SAAS,kBAAkB,SAAA,EAA2B;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,SAAS,CAAA;AAChC,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,GAAG,OAAO,EAAA;AAC1C,EAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAW;AAAA,IACzC,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACR,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAChB;AAEO,SAAS,aAAA,CAAc;AAAA,EAC7B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB;AACD,CAAA,EAAuB;AACtB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAII,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAqB,IAAI,CAAA;AACnD,EAAA,MAAM,iBAAA,GAAoBC,aAA6C,IAAI,CAAA;AAC3E,EAAA,MAAM,aAAA,GAAgBA,aAA6C,IAAI,CAAA;AACvE,EAAA,MAAM,cAAA,GAAiB,SAAS,IAAA,IAAQ,IAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,SAAS,IAAA,IAAQ,KAAA;AACxC,EAAA,MAAM,eAAA,GAAkB,SAAS,KAAA,IAAS,KAAA;AAE1C,EAAAN,gBAAU,MAAM;AACf,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AACrE,MAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,IAAA,KAA8B;AAC/D,IAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAC7D,IAAA,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACxB,IAAA,aAAA,CAAc,UAAU,UAAA,CAAW,MAAM,QAAA,CAAS,IAAI,GAAG,IAAI,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC9B,IAAA,IAAI;AACH,MAAA,IAAI,CAAC,SAAA,CAAU,SAAA,EAAW,SAAA,EAAW;AACpC,QAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,MACxC;AACA,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AACnD,MAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AACrE,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,iBAAA,CAAkB,UAAU,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,IAAI,CAAA;AACnE,MAAA,SAAA,CAAU,uBAAuB,SAAS,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACP,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,SAAA,CAAU,kBAAkB,OAAO,CAAA;AAAA,IACpC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,OAAA,CAAQ,SAAS,CAAA;AACrD,EAAA,MAAM,iBAAA,GACL,kBAAmB,cAAA,IAAkB,CAAC,CAAC,MAAA,IAAY,eAAA,IAAmB,CAAC,CAAC,OAAA;AAEzE,EAAA,MAAM,WAAA,GACL,OAAO,QAAA,KAAa,WAAA,GACjBO,qBAAA;AAAA,oBACAN,cAAAA,CAACC,4BAAAA,EAAA,EACC,mCACAD,cAAAA;AAAA,MAACG,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,OAAO,IAAA,EAAK;AAAA,QAC3C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,QACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,OAAO,IAAA,EAAK;AAAA,QACxC,UAAA,EAAY;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,SAAA,EAAW,GAAA;AAAA,UACX,OAAA,EAAS,EAAA;AAAA,UACT,IAAA,EAAM;AAAA,SACP;AAAA,QACA,SAAA,EAAU,iBAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QAEV,QAAA,kBAAAD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACV,uBAAA;AAAA,cACA,KAAA,CAAM,IAAA,KAAS,SAAA,GACZ,yBAAA,GACA;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,IAAA,KAAS,SAAA,mBACfF,cAAAA,CAACO,iBAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,oBAExDP,cAAAA;AAAA,gBAACQ,uBAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAU,SAAA;AAAA,kBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU;AAAA,eAC3B;AAAA,8BAEDR,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM;AAAA;AAAA;AAAA;AACpB;AAAA,KACD,EAEF,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACV,GACC,IAAA;AAEJ,EAAA,uBACCE,gBAAAO,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,WAAA;AAAA,oBAEDT,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACd,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACd,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,OAAA,CAAQ,OAAA,EAAQ,CAAA,EACzD,CAAA;AAAA,MAEC,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,YAAA,IAAA,CAAiB,MAAM;AAClD,QAAA,MAAM,aAAA,GACL,uBAAA,CAAwB,OAAA,CAAQ,YAAY,KAC5C,OAAA,CAAQ,YAAA;AACT,QAAA,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACd,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAACQ,uBAAA;AAAA,YAAA;AAAA,cACA,SAAA,EAAU,sBAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,wBAAA,EAA0B,WAAW,KAAA;AAAM;AAAA,WAC5D;AAAA,0BACAR,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCACX,QAAA,EAAA,aAAA,EACF;AAAA,SAAA,EACD,CAAA;AAAA,MAEF,CAAA,GAAG;AAAA,MAAA,CAED,aAAa,iBAAA,qBACdE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,QAAA,SAAA,mBACAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,qBAAU,CAAA,GACvD,IAAA;AAAA,QAEH,kCACAA,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,QACtB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,KAAK,UAAA,EAAW;AAAA,YAC/B,SAAA,EAAU,+BAAA;AAAA,YACV,YAAA,EAAW,cAAA;AAAA,YAEV,mCACAA,cAAAA;AAAA,cAACO,iBAAA;AAAA,cAAA;AAAA,gBACA,SAAA,EAAU,aAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU;AAAA,aAC3B,mBAEAP,cAAAA,CAACU,gBAAA,EAAA,EAAK,WAAU,aAAA,EAAc;AAAA;AAAA,SAEhC,EACD,CAAA;AAAA,QAGA,kBAAkB,MAAA,oBAClBV,eAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,QACtB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,YAChC,SAAA,EAAU,+BAAA;AAAA,YACV,YAAA,EAAW,cAAA;AAAA,YAEX,QAAA,kBAAAA,cAAAA,CAACW,kBAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,SACjC,EACD,CAAA;AAAA,QAGA,mBAAmB,OAAA,oBACnBX,eAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,SACtB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAA;AAAA,YACjC,QAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAU,+BAAA;AAAA,YACV,YAAA,EAAW,eAAA;AAAA,YAEX,QAAA,kBAAAA,cAAAA,CAACY,qBAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,SACpC,EACD;AAAA,OAAA,EAEF;AAAA,KAAA,EAEF,CAAA,EACD;AAAA,GAAA,EACD,CAAA;AAEF;AC5MA,IAAM,oBAAA,GACL,+EAAA;AAED,SAAS,2BAA2B,GAAA,EAAa;AAChD,EAAA,OAAO,oBAAA,CAAqB,KAAK,GAAG,CAAA;AACrC;AASA,IAAM,UAAA,GAA4B;AAAA,EACjC,KAAA,EAAO,kBAAA;AAAA,EACP,QAAA,EAAU;AACX,CAAA;AAEA,IAAM,QAAA,GAA0B;AAAA,EAC/B,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,MAAA;AAAA,EACV,SAAA,EAAW,OAAA;AAAA,EACX,SAAA,EAAW;AACZ,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC/B,GAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd;AACD,CAAA,EAAyB;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIR,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAcC,aAAwB,IAAI,CAAA;AAEhD,EAAA,MAAM,eAAA,GAAkBQ,aAAA;AAAA,IACvB,MAAO,GAAA,GAAM,0BAAA,CAA2B,GAAG,CAAA,GAAI,KAAA;AAAA,IAC/C,CAAC,GAAG;AAAA,GACL;AACA,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,WAAA,IAAe,eAAe,CAAA;AAE7D,EAAAd,gBAAU,MAAM;AACf,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,aAAA,CAAc,CAAC,CAAA;AAAA,EAIhB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAAA,gBAAU,MAAM;AACf,IAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,GAAA,EAAK;AAEjB,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACpB,CAAC,CAAC,KAAK,CAAA,KAAM;AACZ,QAAA,IAAI,MAAM,cAAA,EAAgB;AACzB,UAAA,YAAA,CAAa,IAAI,CAAA;AACjB,UAAA,QAAA,CAAS,UAAA,EAAW;AAAA,QACrB;AAAA,MACD,CAAA;AAAA,MACA,EAAE,YAAY,OAAA;AAAQ,KACvB;AAEA,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EAClC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,IAAI,cAAA,EAAgB;AACnB,IAAA,uBACCC,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,8BAA8B,CAAA;AAAA,QAElE,QAAA,kBAAAE,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACf,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAACc,mBAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO,EAAE,SAAA,EAAW,qCAAA,EAAsC;AAAA,cAC1D,aAAA,EAAW;AAAA;AAAA,WACZ;AAAA,0BACAd,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,0BACnBA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,iBAAA,EAAe;AAAA,SAAA,EACtB;AAAA;AAAA,KACD;AAAA,EAEF;AAEA,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,uBACCE,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,oBAAA,EAAsB,0BAA0B,CAAA,EACnE,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAACe,oBAAA,EAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,sBACtBf,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,MACzB,GAAA,mBAAMA,cAAAA,CAAC,MAAA,EAAA,EAAM,eAAI,CAAA,GAAU,IAAA;AAAA,MAC3B,UAAA,GAAa,oBACbA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,gCAAA;AAAA,UACV,SAAS,MAAM;AACd,YAAA,WAAA,CAAY,KAAK,CAAA;AACjB,YAAA,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAAA,UAC3B,CAAA;AAAA,UACA,QAAA,EAAA;AAAA;AAAA,OAED,GACG;AAAA,KAAA,EACL,CAAA;AAAA,EAEF;AAEA,EAAA,MAAM,MAAA,GACL,UAAA,GAAa,CAAA,GACV,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,GAAA,GAAM,GAAG,CAAA,GAAA,EAAM,UAAU,CAAA,CAAA,GACtD,GAAA;AAEJ,EAAA,uBACCA,eAAC,MAAA,EAAA,EAAK,GAAA,EAAK,aAAa,SAAA,EAAU,oBAAA,EAChC,sCACAE,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAU,2BAAA;AAAA,MACV,SAAS,MAAM;AACd,QAAA,IAAI,QAAA,IAAY,GAAA,EAAK,YAAA,GAAe,GAAA,EAAK,OAAO,OAAO,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,UAAU,CAAC,QAAA;AAAA,MACX,aAAW,CAAC,QAAA;AAAA,MACZ,KAAA,EAAO;AAAA,QACN,GAAG,UAAA;AAAA,QACH,SAAA,EAAW,WAAW,CAAA,GAAI;AAAA,OAC3B;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,CAAC,QAAA,oBACDA,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4BAAA,EACf,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAACc,mBAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO,EAAE,SAAA,EAAW,qCAAA,EAAsC;AAAA,cAC1D,aAAA,EAAW;AAAA;AAAA,WACZ;AAAA,0BACAd,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,qBAAA,EAAc;AAAA,SAAA,EACrB,CAAA;AAAA,wBAGDA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,GAAA,EAAK,MAAA;AAAA,YACL,KAAK,GAAA,IAAO,EAAA;AAAA,YACZ,SAAA,EAAU,wBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,GAAG,QAAA;AAAA,cACH,OAAA,EAAS,WAAW,CAAA,GAAI;AAAA,aACzB;AAAA,YACA,QAAQ,MAAM;AACb,cAAA,WAAA,CAAY,KAAK,CAAA;AACjB,cAAA,WAAA,CAAY,IAAI,CAAA;AAAA,YACjB,CAAA;AAAA,YACA,SAAS,MAAM;AACd,cAAA,WAAA,CAAY,KAAK,CAAA;AACjB,cAAA,WAAA,CAAY,IAAI,CAAA;AAAA,YACjB;AAAA;AAAA,SACD;AAAA,QAEC,2BACAA,cAAAA,CAAC,UAAK,SAAA,EAAU,4BAAA,EAA6B,eAAW,IAAA,EACvD,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EACf,QAAA,kBAAAA,eAACgB,eAAA,EAAA,EAAI,CAAA,EACN,GACD,CAAA,GACG;AAAA;AAAA;AAAA,sBAGLhB,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,gCAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAG,UAAA,EAAY,WAAW,OAAA,EAAQ;AAAA,MAE3C,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA,GACZ,EAEF,CAAA;AAEF;ACjLA,SAAS,eAAA,CACR,cACA,iBAAA,EACa;AACb,EAAA,OAAO;AAAA,IACN,CAAA,EAAG,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,OAAG,QAAA,EAAS,CAAA;AAAA,IAClC,IAAA,EAAM,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,IACxC,GAAA,EAAK,CAAC,EAAE,QAAA,uBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAK,UAAS,CAAA,EAChB,CAAA;AAAA,IAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,MAAA,EAAQ,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,YAAQ,QAAA,EAAS,CAAA;AAAA,IAC5C,EAAA,EAAI,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,QAAI,QAAA,EAAS,CAAA;AAAA,IACpC,UAAA,EAAY,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,gBAAY,QAAA,EAAS,CAAA;AAAA,IACpD,EAAA,EAAI,sBAAMA,cAAAA,CAAC,IAAA,EAAA,EAAG,CAAA;AAAA,IACd,CAAA,EAAG,CAAC,EAAE,IAAA,EAAM,UAAS,qBACpBA,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,uBACjC,QAAA,EACF,CAAA;AAAA,IAED,KAAK,CAAC,EAAE,GAAA,EAAK,GAAA,uBACZA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACA,GAAA,EAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,MAAA;AAAA,QACrC,GAAA,EAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,MAAA;AAAA,QACrC,WAAA,EAAa,iBAAA;AAAA,QACb;AAAA;AAAA,KACD;AAAA,IAED,OAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACd,0BAAAA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,0BAAA,EAA4B,UAAS,CAAA,EACvD,CAAA;AAAA,IAED,KAAA,EAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAS,CAAA;AAAA,IAEvD,KAAA,EAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAS,CAAA;AAAA,IAEvD,EAAA,EAAI,CAAC,EAAE,QAAA,EAAS,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAS,CAAA;AAAA,IAEjD,EAAA,EAAI,CAAC,EAAE,QAAA,EAAS,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAS;AAAA,GAElD;AACD;AAEO,SAAS,kBAAA,CAAmB;AAAA,EAClC,OAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACD,CAAA,EAA4B;AAC3B,EAAA,MAAM,UAAA,GAAaa,aAAAA;AAAA,IAClB,MAAM,eAAA,CAAgB,YAAA,EAAc,iBAAiB,CAAA;AAAA,IACrD,CAAC,cAAc,iBAAiB;AAAA,GACjC;AAEA,EAAA,uBACCb,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,oBAAA;AAAA,QACA,WAAA,IAAe;AAAA,OAChB;AAAA,MAEA,QAAA,kBAAAA,eAACiB,8BAAA,EAAA,EAAc,aAAA,EAAe,CAACC,0BAAS,CAAA,EAAG,YACzC,QAAA,EAAA,OAAA,EACF;AAAA;AAAA,GACD;AAEF;ACxFA,IAAM,WAAA,GACL,smDAAA;AAID,IAAM,WAAA,GACL,6HAAA;AAGD,SAAS,UAAU,CAAA,EAAmB;AACrC,EAAA,OAAO,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AAChE;AAOA,IAAM,OAAA,GAAU;AAAA;AAAA,EAEf,UAAA,EAAY,GAAA;AAAA,EACZ,eAAA,EAAiB,GAAA;AAAA,EACjB,YAAA,EAAc,IAAA;AAAA,EACd,aAAA,EAAe;AAChB,CAAA;AAEA,IAAM,cACL,OAAA,CAAQ,UAAA,GACR,QAAQ,eAAA,GACR,OAAA,CAAQ,eACR,OAAA,CAAQ,aAAA;AAET,SAAS,YAAY,OAAA,EAAwB;AAC5C,EAAA,IAAI,IAAI,OAAA,GAAU,WAAA;AAElB,EAAA,IAAI,CAAA,GAAI,QAAQ,UAAA,EAAY;AAC3B,IAAA,OAAO,EAAE,MAAM,WAAA,EAAY;AAAA,EAC5B;AACA,EAAA,CAAA,IAAK,OAAA,CAAQ,UAAA;AAEb,EAAA,IAAI,CAAA,GAAI,QAAQ,eAAA,EAAiB;AAChC,IAAA,OAAO;AAAA,MACN,IAAA,EAAM,OAAA;AAAA,MACN,SAAA,EAAW,CAAA;AAAA,MACX,QAAA,EAAU,SAAA,CAAU,CAAA,GAAI,OAAA,CAAQ,eAAe;AAAA,KAChD;AAAA,EACD;AACA,EAAA,CAAA,IAAK,OAAA,CAAQ,eAAA;AAEb,EAAA,IAAI,CAAA,GAAI,QAAQ,YAAA,EAAc;AAC7B,IAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,CAAA,GAAI,QAAQ,YAAA,EAAa;AAAA,EAClE;AACA,EAAA,CAAA,IAAK,OAAA,CAAQ,YAAA;AAEb,EAAA,OAAO;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,SAAA,EAAW,EAAA;AAAA,IACX,QAAA,EAAU,SAAA,CAAU,CAAA,GAAI,OAAA,CAAQ,aAAa;AAAA,GAC9C;AACD;AAGA,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,OAAA,GAAU,GAAA;AAChB,IAAM,MAAA,GAAS,EAAA;AACf,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,kBAAA,GAAqB,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,MAAA;AACzC,IAAM,iBAAA,GAAoB,GAAA;AAU1B,IAAI,mBAAA,GAA4C,IAAA;AAChD,IAAI,oBAAA,GAAsD,IAAA;AAE1D,SAAS,kBAAA,GAAoC;AAC5C,EAAA,MAAM,IAAA,GAAO,EAAE,gBAAA,EAAkB,CAAA,EAAE;AACnC,EAAA,OAAO;AAAA,IACN,OAAA,EAASC,mBAAA,CAAY,WAAA,EAAa,WAAA,EAAa,IAAI,CAAA;AAAA,IACnD,QAAA,EAAUA,mBAAA,CAAY,WAAA,EAAa,WAAA,EAAa,IAAI;AAAA,GACrD;AACD;AAEA,SAAS,sBAAA,GAAiD;AACzD,EAAA,IAAI,mBAAA,EAAqB,OAAO,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,CAAA;AACnE,EAAA,IAAI,sBAAsB,OAAO,oBAAA;AAEjC,EAAA,oBAAA,GAAuB,IAAI,OAAA,CAAuB,CAAC,OAAA,KAAY;AAC9D,IAAA,MAAM,MAAM,MAAM;AACjB,MAAA,mBAAA,GAAsB,kBAAA,EAAmB;AACzC,MAAA,OAAA,CAAQ,mBAAmB,CAAA;AAAA,IAC5B,CAAA;AACA,IAAA,MAAM,MACL,UAAA,CAGC,mBAAA;AACF,IAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC9B,MAAA,GAAA,CAAI,GAAA,EAAK,EAAE,OAAA,EAAS,GAAA,EAAK,CAAA;AAAA,IAC1B,CAAA,MAAO;AACN,MAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IAClB;AAAA,EACD,CAAC,CAAA;AACD,EAAA,OAAO,oBAAA;AACR;AAEO,SAAS,UAAA,GAAa;AAC5B,EAAA,MAAM,OAAA,GAAUd,aAA8B,IAAI,CAAA;AAClD,EAAA,MAAM,YAAA,GAAeA,aAA2B,IAAI,CAAA;AAEpD,EAAAN,gBAAU,MAAM;AACf,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA;AAAA,MACtB;AAAA,KACD,CAAE,OAAA;AACF,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,OAAA,EAAS,YAAA,CAAa,GAAA,EAAK,WAAW,CAAA;AAC9C,MAAA,OAAA,CAAQ,OAAA,EAAS,YAAA,CAAa,cAAA,EAAgB,GAAG,CAAA;AACjD,MAAA,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,SAAA,EAAW,GAAG,CAAA;AACjD,MAAA;AAAA,IACD;AAEA,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,IAAA,IAAI,aAAA,GAAgB,mBAAA;AAEpB,IAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC7B,MAAA,MAAM,UAAU,GAAA,GAAM,KAAA;AACtB,MAAA,MAAM,KAAA,GAAQ,YAAY,OAAO,CAAA;AAEjC,MAAA,IAAI,CAAA;AACJ,MAAA,IAAI,WAAA,GAAc,CAAA;AAClB,MAAA,IAAI,WAAA,GAAc,CAAA;AAGlB,MAAA,MAAM,IAAA,GAAQ,UAAU,GAAA,GAAO,GAAA;AAE/B,MAAA,QAAQ,MAAM,IAAA;AAAM,QACnB,KAAK,WAAA;AACJ,UAAA,CAAA,GAAI,WAAA;AACJ,UAAA,WAAA,GAAc,CAAA;AACd,UAAA,WAAA,GAAc,CAAA;AACd,UAAA;AAAA,QACD,KAAK,OAAA,EAAS;AACb,UAAA,IAAI,CAAC,aAAA,EAAe;AAGnB,YAAA,CAAA,GAAI,WAAA;AACJ,YAAA,WAAA,GAAc,CAAA;AACd,YAAA,WAAA,GAAc,CAAA;AACd,YAAA;AAAA,UACD;AACA,UAAA,CAAA,GACC,KAAA,CAAM,SAAA,KAAc,CAAA,GACjB,aAAA,CAAc,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,GACpC,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA;AAEzC,UAAA,MAAM,IACL,KAAA,CAAM,SAAA,KAAc,IACjB,KAAA,CAAM,QAAA,GACN,IAAI,KAAA,CAAM,QAAA;AAEd,UAAA,WAAA,GAAc,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,CAAA,GAAA,CAAK,IAAI,GAAA,IAAO,GAAA;AAE5C,UAAA,WAAA,GAAc,CAAA,GAAI,IAAA,GAAO,CAAA,GAAA,CAAK,CAAA,GAAI,IAAA,IAAQ,IAAA;AAC1C,UAAA;AAAA,QACD;AAAA,QACA,KAAK,aAAA;AACJ,UAAA,CAAA,GAAI,WAAA;AACJ,UAAA,WAAA,GAAc,CAAA;AACd,UAAA,WAAA,GAAc,CAAA;AACd,UAAA;AAAA;AAGF,MAAA,IAAI,QAAQ,OAAA,EAAS;AACpB,QAAA,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,GAAA,EAAK,CAAC,CAAA;AACnC,QAAA,OAAA,CAAQ,QAAQ,YAAA,CAAa,cAAA,EAAgB,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,MACpE;AACA,MAAA,IAAI,aAAa,OAAA,EAAS;AACzB,QAAA,YAAA,CAAa,QAAQ,YAAA,CAAa,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA;AACnE,QAAA,YAAA,CAAa,OAAA,CAAQ,YAAA;AAAA,UACpB,WAAA;AAAA,UACA,CAAA,OAAA,EAAU,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,IAAI,OAAO,CAAA,CAAA;AAAA,SAChD;AAAA,MACD;AAEA,MAAA,GAAA,GAAM,sBAAsB,IAAI,CAAA;AAAA,IACjC,CAAA;AAEA,IAAA,GAAA,GAAM,sBAAsB,IAAI,CAAA;AAEhC,IAAA,IAAI,CAAC,aAAA,EAAe;AACnB,MAAA,KAAK,sBAAA,EAAuB,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW;AAC9C,QAAA,IAAI,CAAC,WAAW,aAAA,GAAgB,MAAA;AAAA,MACjC,CAAC,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,MAAM;AACZ,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,oBAAA,CAAqB,GAAG,CAAA;AAAA,IACzB,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACCG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,yBAAA;AAAA,MACV,OAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAU,OAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAF,eAAC,MAAA,EAAA,EAAK,GAAA,EAAK,SAAS,CAAA,EAAG,WAAA,EAAa,MAAK,cAAA,EAAe,CAAA;AAAA,wBAGxDE,eAAAA,CAAC,GAAA,EAAA,EAAE,GAAA,EAAK,YAAA,EAAc,SAAS,CAAA,EAC9B,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,EAAA,EAAI,OAAA;AAAA,cACJ,EAAA,EAAI,OAAA;AAAA,cACJ,CAAA,EAAG,MAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAa,iBAAA;AAAA,cACb,aAAA,EAAe;AAAA;AAAA,WAChB;AAAA,0BACAA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,EAAA,EAAI,OAAA;AAAA,cACJ,EAAA,EAAI,OAAA;AAAA,cACJ,CAAA,EAAG,MAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAa,iBAAA;AAAA,cACb,aAAA,EAAc,OAAA;AAAA,cACd,eAAA,EAAiB,CAAA,EAAG,kBAAA,GAAqB,iBAAiB,IAAI,kBAAkB,CAAA;AAAA;AAAA;AACjF,SAAA,EACD;AAAA;AAAA;AAAA,GACD;AAEF;AChPO,IAAM,eAAA,GAAkB;AAAA,EAC9B,WAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACD,CAAA;AAEO,IAAM,oBAAA,GAAuB,cAAA;AAEpC,SAAS,kBACL,MAAA,EACkB;AACrB,EAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,IACtB,CAAC,KAAA,KACA,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK;AAAA,GACpD;AACA,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,OAAO,CAAA,GAAI,MAAA;AACpD;AAOA,SAAS,qBAAqB,OAAA,EAAiC;AAC9D,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK;AACtB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AACxC,IAAA,IAAI,IAAA,EAAM;AACT,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,KAAK,CAAC,CAAA,CAAE,IAAA,EAAK,EAAG,CAAA;AACpD,MAAA;AAAA,IACD;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,SAAI,CAAA,EAAG;AAC1B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,SAAA;AAAA,QACT,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA;AAAK,OACzB,CAAA;AACD,MAAA;AAAA,IACD;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,SAAI,CAAA,EAAG;AAC1B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,OAAA;AAAA,QACT,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA;AAAK,OACzB,CAAA;AACD,MAAA;AAAA,IACD;AACA,IAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAM,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,GAAA;AACR;AAEA,SAAS,eAAe,OAAA,EAAyB;AAChD,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AACnC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACjC,EAAA,MAAM,IAAI,OAAA,GAAU,EAAA;AACpB,EAAA,OAAO,CAAA,GAAI,IAAI,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,GAAG,CAAC,CAAA,CAAA,CAAA;AACpC;AAQA,SAAS,eAAA,CAAgB;AAAA,EACxB,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EAAyB;AACxB,EAAA,uBACCA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,4BAAA,EAA8B,SAAS,CAAA,EAAG,YAAA,EAAY,SAAA,EACzE,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,aAAA,EAAY,MAAA,EAC9D,QAAA,kBAAAA,eAACC,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACzB,QAAA,kBAAAD,cAAAA;AAAA,IAACG,mBAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MAEA,SAAA,EAAU,kCAAA;AAAA,MACV,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,MACjD,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,MACjD,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,QAAQ,WAAA,EAAY;AAAA,MAC/C,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,MAErD,yBAAe,KAAK;AAAA,KAAA;AAAA,IAPhB;AAAA,GAQN,EACD,GACD,CAAA,EACD,CAAA;AAEF;AAWO,SAAS,eAAA,CAAgB;AAAA,EAC/B,OAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACD,CAAA,EAAyB;AACxB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,IAAI,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,cAAAA;AAAA,IAAS;AAAA;AAAA;AAAA;AAAA,MAI5C,WAAA,IAAe,SAAA,GACZ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,GAAI,CAAC,CAAA,GACvD;AAAA;AAAA,GACJ;AAGA,EAAA,MAAM,aAAA,GAAgBC,aAAO,UAAU,CAAA;AACvC,EAAA,MAAM,YAAA,GAAeA,aAAsB,IAAI,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgBA,aAAO,WAAW,CAAA;AAExC,EAAA,MAAM,MAAA,GAASQ,cAAQ,MAAM,oBAAA,CAAqB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAErE,EAAA,MAAM,iBAAA,GAAoBA,cAAQ,MAAM;AACvC,IAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAAA,MACzB,CAAC,CAAA,KACA,CAAA,CAAE,IAAA,KAAS;AAAA,KACb;AACA,IAAA,OACC,UAAA,CAAW,SAAS,CAAA,IACpB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,IAAA,KAAS,YAAA;AAAA,EAE7C,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAd,gBAAU,MAAM;AACf,IAAA,IAAI,aAAA,CAAc,OAAA,IAAW,CAAC,WAAA,EAAa;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAA;AAIb,MAAA,YAAA,CAAa,UAAU,aAAA,CAAc,OAAA;AAAA,IACtC;AACA,IAAA,aAAA,CAAc,OAAA,GAAU,WAAA;AAAA,EACzB,CAAA,EAAG,CAAC,WAAA,EAAa,SAAS,CAAC,CAAA;AAE3B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,SAAA,EAAW;AAGhC,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,MAAM,OAAO,MAAM;AAClB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,GAAI,CAAC,CAAA;AACnE,MAAA,aAAA,CAAc,OAAA,GAAU,GAAA;AACxB,MAAA,aAAA,CAAc,GAAG,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,IAAA,EAAK;AACL,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,IAAA,EAAM,GAAI,CAAA;AACxC,IAAA,OAAO,MAAM;AACZ,MAAA,MAAA,GAAS,KAAA;AACT,MAAA,MAAA,CAAO,cAAc,EAAE,CAAA;AAAA,IACxB,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,WAAA,EAAa,SAAS,CAAC,CAAA;AAE3B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,eAAe,iBAAA,EAAmB;AACvC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,MAAM;AACnC,MAAA,YAAA,CAAa,CAAC,CAAA,KAAA,CAAO,CAAA,GAAI,CAAA,IAAK,gBAAgB,MAAM,CAAA;AAAA,IACrD,GAAG,GAAI,CAAA;AACP,IAAA,OAAO,MAAM,MAAA,CAAO,aAAA,CAAc,EAAE,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,WAAA,EAAa,iBAAiB,CAAC,CAAA;AAInC,EAAA,MAAM,iBACL,CAAC,WAAA,IAAe,aAAA,CAAc,OAAA,IAAW,YACtC,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,KAAQ,SAAA,IAAa,GAAI,CAAC,CAAA,GACvD,MAAA;AACJ,EAAA,MAAM,QAAA,GAAW,cAAA;AAAA,IAChB,YAAA,CAAa,OAAA;AAAA,IACb,cAAA;AAAA;AAAA;AAAA,IAGA,aAAa,OAAA,IAAW,IAAA,IAAQ,CAAC,aAAA,CAAc,UAAU,WAAA,GAAc;AAAA,GACxE;AAEA,EAAA,MAAM,cAAc,WAAA,mBACnBG,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EACf,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,qBAAA,EAAc,CAAA;AAAA,IAC1D,SAAA,KAAc,0BACdA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,0BAAA;AAAA,QACV,SAAA,EAAW,CAAA,QAAA,EAAW,cAAA,CAAe,UAAU,CAAC,CAAA,CAAA;AAAA,QAChD,KAAA,EAAO;AAAA;AAAA;AACR,GAAA,EAEF,CAAA,GACG,YAAY,IAAA,IAAQ,QAAA,GAAW,oBAClCE,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EACd,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,UAAK,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oBACjBA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACV,0BAAA;AAAA,UACA;AAAA,SACD;AAAA,QACA,SAAA,EAAW,CAAA,YAAA,EAAe,cAAA,CAAe,QAAQ,CAAC,CAAA,CAAA;AAAA,QAClD,KAAA,EAAO;AAAA;AAAA;AACR,GAAA,EACD,CAAA,mBAEDA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAGd,EAAA,MAAM,SAAA,GAAY,iBAAA,GAAoB,YAAA,GAAe,MAAA,CAAO,SAAS,CAAA;AACrE,EAAA,MAAM,UAAA,GAAa,iBAAA,GAChB,oBAAA,GACA,eAAA,CAAgB,SAAS,CAAA;AAE5B,EAAA,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACd,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,2BAAA;AAAA,QACV,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAChC,eAAA,EAAe,IAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAACoB,wBAAA;AAAA,YAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACV,4BAAA;AAAA,gBACA,IAAA,IAAQ;AAAA,eACT;AAAA,cACA,aAAA,EAAW;AAAA;AAAA,WACZ;AAAA,UACC;AAAA;AAAA;AAAA,KACF;AAAA,oBAEApB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACd,QAAA,kBAAAA,cAAAA,CAACC,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACxB,QAAA,EAAA,IAAA,oBACAD,cAAAA;AAAA,MAACG,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QAEA,SAAA,EAAU,4BAAA;AAAA,QACV,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,QAC/C,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS;AAAA,QAE5B,QAAA,kBAAAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACxB,YAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC9B,cAAA,uBACCF,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEA,SAAA,EAAU,8BAAA;AAAA,kBAET,QAAA,EAAA,IAAA,CAAK;AAAA,iBAAA;AAAA,gBAHD;AAAA,eAIN;AAAA,YAEF;AACA,YAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC3B,cAAA,uBACCA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEA,SAAA,EAAU,2BAAA;AAAA,kBAET,QAAA,EAAA,IAAA,CAAK;AAAA,iBAAA;AAAA,gBAHD;AAAA,eAIN;AAAA,YAEF;AACA,YAAA,uBACCA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEA,SAAA,EAAW,EAAA;AAAA,kBACV,2BAAA;AAAA,kBACA,IAAA,CAAK,OAAA,KAAY,SAAA,GACd,mCAAA,GACA;AAAA,iBACJ;AAAA,gBAEC,QAAA,EAAA,IAAA,CAAK;AAAA,eAAA;AAAA,cARD;AAAA,aASN;AAAA,UAEF,CAAC,CAAA;AAAA,UAEA,+BACAE,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,SAAA,EAAU,2BAAA;AAAA,cACV,WAAA,EAAU,QAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAF,eAAC,UAAA,EAAA,EAAW,CAAA;AAAA,gCACZA,cAAAA,CAACC,4BAAAA,EAAA,EAAgB,IAAA,EAAK,QACrB,QAAA,kBAAAD,cAAAA;AAAA,kBAACG,mBAAAA,CAAO,IAAA;AAAA,kBAAP;AAAA,oBAEA,SAAA,EAAU,4DAAA;AAAA,oBACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,oBAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,oBAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,oBAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,oBAEpD,QAAA,EAAA;AAAA,mBAAA;AAAA,kBAPI;AAAA,iBAQN,EACD;AAAA;AAAA;AAAA;AACD,SAAA,EAEF;AAAA,OAAA;AAAA,MAjEI;AAAA,OAoEP,CAAA,EACD;AAAA,GAAA,EACD,CAAA;AAEF;ACxUO,IAAM,cAAA,GAA+B;AAAA,EAC3C,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACb,IAAA,EAAM,CAAA;AAAA,EACN,WAAA,EAAa,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACpB,OAAA,EAAS,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EAChB,IAAA,EAAM;AACP,CAAA;AAEO,IAAM,cAAA,GAA+B;AAAA,EAC3C,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACb,IAAA,EAAM,CAAA;AAAA,EACN,WAAA,EAAa,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACpB,OAAA,EAAS,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EAChB,IAAA,EAAM;AACP,CAAA;AAEA,SAAS,SAAA,CAAU,MAAc,KAAA,EAA6B;AAC7D,EAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,CAAM,IAAA;AAC/B,EAAA,IAAI,IAAA,KAAS,IAAA,EAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,MAAA,EAAO,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAC5E,EAAA,IAAI,QAAA,CAAS,SAAS,IAAI,CAAA;AACzB,IAAA,OAAO,KAAA,CAAM,YAAY,CAAC,CAAA,GAAI,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA;AAClE,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,CAAA,GAAI,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACxD;AAKA,IAAM,oBAAA,GAAuB,uBAAA;AAM7B,IAAM,mBAAA,uBAA0B,GAAA,EAAoB;AAE7C,SAAS,gBACf,UAAA,EACA,OAAA,EACA,KAAA,GAAsB,cAAA,EACtB,sBACA,QAAA,EAC+C;AAC/C,EAAA,MAAM,MAAA,GAAS,QAAA,GAAW,mBAAA,CAAoB,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAA;AAC9D,EAAA,MAAM,oBACL,MAAA,KAAW,MAAA,IAAa,WAAW,UAAA,CAAW,MAAM,IAAI,MAAA,GAAS,MAAA;AAElE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,cAAAA,CAAS,qBAAqB,EAAE,CAAA;AAC1E,EAAA,MAAM,YAAA,GAAeC,YAAAA,CAAO,iBAAA,IAAqB,EAAE,CAAA;AACnD,EAAA,MAAM,SAAA,GAAYA,aAAO,UAAU,CAAA;AACnC,EAAA,MAAM,UAAA,GAAaA,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,mBAAA,GAAsBA,aAAO,oBAAoB,CAAA;AACvD,EAAA,MAAM,WAAA,GAAcA,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,QAAA,GAAWA,aAA6C,IAAI,CAAA;AAClE,EAAA,MAAM,UAAA,GAAaA,aAAO,KAAK,CAAA;AAE/B,EAAA,SAAA,CAAU,OAAA,GAAU,UAAA;AACpB,EAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,EAAA,mBAAA,CAAoB,OAAA,GAAU,oBAAA;AAC9B,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAAiB;AACxC,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,IAAI,YAAY,OAAA,EAAS;AACxB,MAAA,mBAAA,CAAoB,GAAA,CAAI,WAAA,CAAY,OAAA,EAAS,IAAI,CAAA;AAAA,IAClD;AAAA,EACD,CAAA;AAEA,EAAAN,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,OAAA,EAAS;AACb,MAAA,IAAI,SAAS,OAAA,EAAS;AACrB,QAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,MACpB;AACA,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,MAAA,YAAA,CAAa,OAAA,GAAU,UAAA;AACvB,MAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,MAAA,IAAI,YAAY,OAAA,EAAS;AAGxB,QAAA,mBAAA,CAAoB,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,MAC/C;AACA,MAAA;AAAA,IACD;AAKA,IAAA,IAAI,YAAA,CAAa,WAAW,CAAC,SAAA,CAAU,QAAQ,UAAA,CAAW,YAAA,CAAa,OAAO,CAAA,EAAG;AAChF,MAAA,YAAA,CAAa,OAAA,GAAU,EAAA;AACvB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,IAAI,WAAA,CAAY,OAAA,EAAS,mBAAA,CAAoB,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,IACxE;AAEA,IAAA,IACC,YAAA,CAAa,OAAA,CAAQ,MAAA,KAAW,CAAA,IAChC,mBAAA,CAAoB,OAAA,IACpB,SAAA,CAAU,OAAA,CAAQ,UAAA,CAAW,mBAAA,CAAoB,OAAO,CAAA,EACvD;AACD,MAAA,cAAA,CAAe,oBAAoB,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACxB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAErB,IAAA,MAAM,OAAO,MAAM;AAClB,MAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACxB,QAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,QAAA;AAAA,MACD;AAOA,MAAA,IAAI,YAAA,CAAa,WAAW,CAAC,SAAA,CAAU,QAAQ,UAAA,CAAW,YAAA,CAAa,OAAO,CAAA,EAAG;AAChF,QAAA,IAAI,SAAA,GAAY,CAAA;AAChB,QAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,YAAA,CAAa,QAAQ,MAAA,EAAQ,SAAA,CAAU,QAAQ,MAAM,CAAA;AAC7E,QAAA,OAAO,SAAA,GAAY,UAAU,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA,KAAM,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9F,UAAA,SAAA,EAAA;AAAA,QACD;AAGA,QAAA,MAAM,QAAA,GAAW,UAAU,OAAA,CAAQ,KAAA,CAAM,GAAG,SAAS,CAAA,CAAE,YAAY,IAAI,CAAA;AAEvE,QAAA,IAAI,YAAY,CAAA,EAAG;AAClB,UAAA,MAAM,cAAc,oBAAA,CAAqB,IAAA,CAAK,UAAU,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC/E,UAAA,MAAM,cAAc,oBAAA,CAAqB,IAAA,CAAK,aAAa,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAC,CAAA;AAElF,UAAA,IAAI,eAAe,WAAA,EAAa;AAE/B,YAAA,MAAM,SAAA,GAAY,QAAA,GAAW,WAAA,CAAY,CAAC,CAAA,CAAE,MAAA;AAC5C,YAAA,MAAM,SAAA,GAAY,QAAA,GAAW,WAAA,CAAY,CAAC,CAAA,CAAE,MAAA;AAC5C,YAAA,MAAM,YAAY,IAAA,CAAK,GAAA;AAAA,cACtB,KAAK,GAAA,CAAI,YAAA,CAAa,QAAQ,MAAA,IAAU,SAAA,GAAY,YAAY,SAAS,CAAA;AAAA,cACzE,UAAU,OAAA,CAAQ;AAAA,aACnB;AACA,YAAA,cAAA,CAAe,SAAA,CAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,SAAS,CAAC,CAAA;AACpD,YAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA;AACrC,YAAA;AAAA,UACD;AAAA,QACD;AAGA,QAAA,cAAA,CAAe,SAAA,CAAU,QAAQ,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,GAAI,QAAA,GAAW,SAAS,CAAC,CAAA;AAC/E,QAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA;AACrC,QAAA;AAAA,MACD;AAEA,MAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,MAAA,GAAS,SAAA,CAAU,QAAQ,MAAA,EAAQ;AAC3D,QAAA,MAAM,YAAY,SAAA,CAAU,OAAA,CAAQ,KAAA,CAAM,YAAA,CAAa,QAAQ,MAAM,CAAA;AAKrE,QAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,IAAA,CAAK,SAAS,CAAA;AACpD,QAAA,IAAI,QAAA,EAAU;AACb,UAAA,cAAA,CAAe,YAAA,CAAa,OAAA,GAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AACjD,UAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA;AACrC,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,QAAA,GAAW,UAAU,CAAC,CAAA;AAC5B,QAAA,cAAA,CAAe,YAAA,CAAa,UAAU,QAAQ,CAAA;AAC9C,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,QAAA,EAAU,KAAK,CAAA;AACvC,QAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA;AAAA,MAC1C,CAAA,MAAO;AACN,QAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AAAA,MAC/C;AAAA,IACD,CAAA;AAEA,IAAA,IAAA,EAAK;AAEL,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,SAAS,OAAA,EAAS;AACrB,QAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,MACpB;AACA,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,IACtB,CAAA;AAAA,EAED,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,WACL,OAAA,IAAW,YAAA,CAAa,OAAA,CAAQ,MAAA,GAAS,UAAU,OAAA,CAAQ,MAAA;AAE5D,EAAA,OAAO;AAAA,IACN,aAAA,EAAe,UAAU,aAAA,GAAgB,UAAA;AAAA,IACzC;AAAA,GACD;AACD;AC5KA,IAAM,4BAAA,GAA+B;AAAA,EACpC,0BAAA;AAAA,EACA;AACD,CAAA,CAAE,KAAK,IAAI,CAAA;AAOX,SAAS,oBAAA,CACR,OAAA,EACA,yBAAA,GAA4B,KAAA,EACnB;AACT,EAAA,MAAM,iBAAA,GACL,OAAA,CAAQ,eAAA,IAAmB,OAAA,CAAQ,kBAAA,IAAsB,EAAA;AAE1D,EAAA,MAAM,WAAW,OAAA,CAAQ,qBAAA,IACxBsB,6CAAA,CAAuB,OAAA,CAAQ,OAAO,iBAAiB,CAAA;AAExD,EAAA,IAAI,6BAA6B,QAAA,EAAU;AAC1C,IAAA,OAAO,+BAA+B,IAAA,GAAO,QAAA;AAAA,EAC9C;AACA,EAAA,IAAI,yBAAA,EAA2B;AAC9B,IAAA,OAAO,4BAAA;AAAA,EACR;AAEA,EAAA,OAAO,QAAA;AACR;AAEO,SAAS,kBAAA,CAAmB;AAAA,EAClC,OAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACD,CAAA,EAA4B;AAC3B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIjB,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAqB,IAAI,CAAA;AACnD,EAAA,MAAM,iBAAA,GAAoBC,aAA6C,IAAI,CAAA;AAC3E,EAAA,MAAM,aAAA,GAAgBA,aAA6C,IAAI,CAAA;AACvE,EAAA,MAAM,cAAA,GAAiB,SAAS,IAAA,IAAQ,IAAA;AACxC,EAAA,MAAM,eAAA,GAAA,CACJ,OAAA,EAAS,KAAA,IAAS,IAAA,KAAS,CAAC,CAAC,qBAAA;AAE/B,EAAA,MAAM,YAAA,GAAe,CAAC,CAAC,OAAA,CAAQ,YAAA;AAC/B,EAAA,MAAM,kBAAkBA,YAAAA,CAAO,CAAC,CAAC,OAAA,CAAQ,WAAA,IAAe,CAAC,YAAY,CAAA;AACrE,EAAA,MAAM,uBAAA,GAA0BA,YAAAA;AAAA,IAC/B,CAAC,YAAA,IAAgB,OAAA,CAAQ,cAAA,KAAmB;AAAA,GAC7C;AACA,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,CAAC,YAAA,kBAA8B,OAAA,GAAU,IAAA;AAEpE,EAAAN,gBAAU,MAAM;AACf,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AACrE,MAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,sBAAsB,MAAM;AACjC,IAAA,MAAM,GAAA,GAAM,QAAQ,WAAA,IAAe,CAAC,eAChC,OAAA,CAAQ,gBAAA,IAAoB,OAAA,CAAQ,OAAA,GACrC,OAAA,CAAQ,OAAA;AACX,IAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,IAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AAAA,EAChC,CAAA,GAAG;AAEH,EAAA,MAAM,mBAAA,GACL,CAAC,YAAA,KACA,OAAA,CAAQ,mBAAmB,YAAA,IAC3B,OAAA,CAAQ,QAAQ,KAAA,EAAO,MAAM,KAC7B,OAAA,CAAQ,OAAA,CAAQ,eAAe,CAAA,IAC/B,OAAA,CAAQ,QAAQ,kBAAkB,CAAA,IAClC,QAAQ,kBAAkB,CAAA,CAAA;AAE5B,EAAA,IAAI,mBAAA,IAAuB,CAAC,OAAA,CAAQ,OAAA,EAAS;AAC5C,IAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAAA,EACnC;AAEA,EAAA,MAAM,4BACL,CAAC,YAAA,IAAgB,uBAAA,CAAwB,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA;AAC9D,EAAA,MAAM,kBAAA,GAAqBc,aAAAA;AAAA,IAC1B,MAAM,oBAAA,CAAqB,OAAA,EAAS,yBAAyB,CAAA;AAAA,IAC7D,CAAC,SAAS,yBAAyB;AAAA,GACpC;AAEA,EAAA,MAAM,mBAAA,GACL,CAAC,YAAA,IACD,CAAC,CAAC,QAAQ,WAAA,IACV,CAAC,kBAAA,IACD,CAAC,OAAA,CAAQ,OAAA;AAEV,EAAA,MAAM,EAAE,aAAA,EAAe,eAAA,EAAgB,GAAI,eAAA;AAAA,IAC1C,kBAAA;AAAA,IACA,gBAAgB,OAAA,IAAW,mBAAA;AAAA,IAC3B,cAAA;AAAA,IACA,4BAA4B,4BAAA,GAA+B,MAAA;AAAA,IAC3D,CAAA,SAAA,EAAY,QAAQ,EAAE,CAAA;AAAA,GACvB;AACA,EAAA,MAAM,kBAAA,GAAqB,QAAQ,eAAe,CAAA;AAClD,EAAA,MAAM,iBAAA,GAAoB,CAAC,YAAA,KAAiB,kBAAA,IAAsB,mBAAA,CAAA;AAClE,EAAA,MAAM,uBAAA,GACL,CAAC,YAAA,IACD,CAAC,CAAC,OAAA,CAAQ,WAAA,IACV,CAAC,OAAA,CAAQ,OAAA,IACT,CAAC,kBAAA,IACD,QAAQ,cAAA,KAAmB,SAAA;AAE5B,EAAA,MAAM,qBAAA,GACL,CAAC,YAAA,IACD,eAAA,CAAgB,WAChB,OAAA,CAAQ,kBAAkB,CAAA,IAC1B,CAAC,OAAA,CAAQ,OAAA;AAEV,EAAA,MAAM,EAAE,aAAA,EAAe,cAAA,EAAgB,QAAA,EAAU,kBAAiB,GACjE,eAAA;AAAA,IACC,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,CAAA,SAAA,EAAY,QAAQ,EAAE,CAAA;AAAA,GACvB;AAED,EAAA,MAAM,qBAAqB,MAAM;AAChC,IAAA,MAAMS,qBAAAA,GAAuB,uBAAA,CAAwB,OAAA,CAAQ,YAAY,CAAA;AACzE,IAAA,IAAIA,qBAAAA,EAAsB;AACzB,MAAA,OAAOA,qBAAAA;AAAA,IACR;AACA,IAAA,IACC,wBAAwB,OAAA,CAAQ,YAAY,CAAA,IAC5C,CAAC,QAAQ,YAAA,EACR;AACD,MAAA,OAAO,+CAAA;AAAA,IACR;AACA,IAAA,OAAO,OAAA,CAAQ,YAAA;AAAA,EAChB,CAAA,GAAG;AAEH,EAAA,MAAM,gBAAA,GAAmBT,cAAQ,MAAM;AACtC,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,OAAO,MAAA;AAC/B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,MAAA;AAAA,EACjC,CAAA,EAAG,CAAC,OAAA,CAAQ,SAAS,CAAC,CAAA;AAKtB,EAAA,MAAM,oBAAoB,MAAM;AAC/B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,MAAA;AACzC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,IAAI,gBAAA,IAAoB,KAAK,SAAA,EAAW;AACvC,MAAA,OAAO,IAAA,CAAK,GAAA;AAAA,QACX,CAAA;AAAA,QACA,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,SAAA,GAAY,oBAAoB,GAAI;AAAA,OACtD;AAAA,IACD;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,IAAA,IAAI,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,SAAA,EAAW;AACtC,MAAA,OAAO,KAAK,KAAA,CAAA,CAAO,IAAA,CAAK,SAAA,GAAY,KAAA,CAAM,aAAa,GAAI,CAAA;AAAA,IAC5D;AACA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,MAAM,GAAA,IAAO,CAAA,CAAE,SAAA,IAAa,CAAA,CAAA,EAAI,CAAC,CAAA;AAClE,IAAA,OAAO,QAAQ,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAI,CAAA,GAAI,MAAA;AAAA,EAC/C,CAAA,GAAG;AAEH,EAAA,MAAM,oBAAA,GAAuB,uBAAA,CAAwB,OAAA,CAAQ,YAAY,CAAA;AACzE,EAAA,MAAM,eAAA,GAAkB,QAAQ,oBAAoB,CAAA;AAKpD,EAAA,IAAI,eAAA,EAAiB;AACpB,IAAA,uBACCb,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACd,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACd,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAACQ,uBAAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAU,oCAAA;AAAA,UACV,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AAAG;AAAA,OAChC;AAAA,sBACAR,eAAC,KAAA,EAAA,EACA,QAAA,kBAAAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA,oBAAA,EACF,CAAA,EACD;AAAA,KAAA,EACD,CAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,CAAC,cAAA,IAAkB,CAAC,kBAAA,EAAoB;AAC9D,IAAA,uBACCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACd,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACd,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAACQ,uBAAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAU,oCAAA;AAAA,UACV,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AAAG;AAAA,OAChC;AAAA,sBACAR,cAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA,iBAAA,mBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA,iBAAA,EACF,CAAA,GACG,IAAA,EACL;AAAA,KAAA,EACD,CAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,IAAI,uBAAA,EAAyB;AAC5B,IAAA,uBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAA,EAAmE,QAAA,EAAA,qBAAA,EAEhF,CAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,IAAA,KAA8B;AAC/D,IAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAC7D,IAAA,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACxB,IAAA,aAAA,CAAc,UAAU,UAAA,CAAW,MAAM,QAAA,CAAS,IAAI,GAAG,IAAI,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC9B,IAAA,IAAI;AACH,MAAA,IAAI,CAAC,SAAA,CAAU,SAAA,EAAW,SAAA,EAAW;AACpC,QAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,MACxC;AACA,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,cAAc,CAAA;AAClD,MAAA,IAAI,iBAAA,CAAkB,OAAA,EAAS,YAAA,CAAa,iBAAA,CAAkB,OAAO,CAAA;AACrE,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,iBAAA,CAAkB,UAAU,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,IAAI,CAAA;AACnE,MAAA,SAAA,CAAU,uBAAuB,SAAS,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACP,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,SAAA,CAAU,kBAAkB,OAAO,CAAA;AAAA,IACpC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,qBAAA,GAAwB;AAAA,MACvB,OAAA;AAAA,MACA,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,aAAa,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,OAAA,IAAW,cAAA,IAAkB,CAAC,eAAA;AAC9D,EAAA,MAAM,SACL,CAAC,OAAA,CAAQ,eACT,cAAA,IACA,CAAC,mBACD,CAAC,gBAAA;AACF,EAAA,MAAM,wBACL,cAAA,IACA,eAAA;AACD,EAAA,MAAM,cAAc,OAAA,CAAQ,WAAA;AAE5B,EAAA,MAAM,WAAA,GACL,OAAO,QAAA,KAAa,WAAA,GACjBM,qBAAAA;AAAA,oBACAN,cAAAA,CAACC,4BAAAA,EAAA,EACC,mCACAD,cAAAA;AAAA,MAACG,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,OAAO,IAAA,EAAK;AAAA,QAC3C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,QACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,GAAA,EAAK,OAAO,IAAA,EAAK;AAAA,QACxC,UAAA,EAAY;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,SAAA,EAAW,GAAA;AAAA,UACX,OAAA,EAAS,EAAA;AAAA,UACT,IAAA,EAAM;AAAA,SACP;AAAA,QACA,SAAA,EAAU,iBAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QAEV,QAAA,kBAAAD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACV,uBAAA;AAAA,cACA,KAAA,CAAM,IAAA,KAAS,SAAA,GACZ,yBAAA,GACA;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,IAAA,KAAS,4BACfF,cAAAA;AAAA,gBAACO,iBAAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAU,SAAA;AAAA,kBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU;AAAA,kCAG3BP,cAAAA;AAAA,gBAACQ,uBAAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAU,SAAA;AAAA,kBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU;AAAA,eAC3B;AAAA,8BAEDR,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM;AAAA;AAAA;AAAA;AACpB;AAAA,KACD,EAEF,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACV,GACC,IAAA;AAEJ,EAAA,uBACCE,eAAAA,CAAAO,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,WAAA;AAAA,oBAEDP,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,MAAA,iBAAA,oBACAF,cAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACA,OAAA,EAAS,eAAA;AAAA,UACT,WAAA,EAAa,mBAAA;AAAA,UACb,WAAA,EAAa,QAAQ,mBAAA,IAAuB,gBAAA;AAAA,UAC5C,SAAA,EAAW;AAAA;AAAA,OACZ;AAAA,sBAGDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,2CACAA,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,WAAA,EAAc,OAAA,CAAQ,WAAA,IAAe,CAAC,WAAA,IAAgB,gBAAA;AAAA,UACtD,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,UAC3B;AAAA;AAAA,OACD,GACG,CAAC,mBAAA,IAAuB,CAAC,kBAAA,mBAC5BA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,KAAA,EAAG,CAAA,GACtD,IAAA,EACL,CAAA;AAAA,MAEC,eAAe,OAAA,CAAQ,WAAA,oBACvBE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACd,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAACuB,mBAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAI,KAAA,EAAO,wBAAA,EAA0B,UAAA,EAAY,CAAA;AAAE;AAAA,SAChF;AAAA,wBACAvB,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAsC,QAAA,EAAA,kCAAA,EAEnD;AAAA,OAAA,EACD,CAAA;AAAA,MAGA,eAAA,oBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACd,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAACQ,uBAAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAU,oCAAA;AAAA,YACV,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AAAG;AAAA,SAChC;AAAA,wBACAR,cAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA,iBAAA,mBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA,iBAAA,EACF,CAAA,GACG,IAAA,EACL;AAAA,OAAA,EACD,CAAA;AAAA,MAGA,UAAU,qBAAA,oBACVE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACb,QAAA,EAAA;AAAA,QAAA,cAAA,oBACAF,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,QACtB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAM,KAAK,UAAA,EAAW;AAAA,YAC/B,SAAA,EAAW,EAAA;AAAA,cACV,oCAAA;AAAA,cACA,MAAA,IAAU;AAAA,aACX;AAAA,YACA,YAAA,EAAW,MAAA;AAAA,YAEV,QAAA,EAAA,MAAA,mBACAA,cAAAA,CAACO,iBAAAA,EAAA,EAAM,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,IAAM,CAAA,mBAEzCP,cAAAA,CAACU,gBAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,EAAG;AAAA;AAAA,SAE1C,EACD,CAAA;AAAA,QAEA,mCACAV,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAM,SACtB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,WAAA;AAAA,YACT,SAAA,EAAU,oCAAA;AAAA,YACV,YAAA,EAAW,gBAAA;AAAA,YAEX,QAAA,kBAAAA,eAACwB,sBAAA,EAAA,EAAW,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,EAAG;AAAA;AAAA,SAC/C,EACD;AAAA,OAAA,EAEF;AAAA,KAAA,EAEF;AAAA,GAAA,EACD,CAAA;AAEF;ACzaA,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAM,mBAAA,GAAsB,GAAA;AAErB,SAAS,UAAA,CAAW;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ;AACT,CAAA,EAAoB;AACnB,EAAA,MAAM,SAAA,GAAYnB,YAAAA,CAAoC,EAAE,CAAA;AACxD,EAAA,MAAM,aAAA,GACL,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAM,SAAA,GAAuB,CAAA,GACpD,IAAA,CAAK,GAAA,CAAI,SAAA,EAAqB,oBAAoB,CAAA,GAClD,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,EAAAN,gBAAU,MAAM;AACf,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM;AACrC,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IAC7B,GAAG,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,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,IAAI,IAAA,IAAQ,CAAC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAChC,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AACnB,IAAA,WAAA,CAAY,SAAS,CAAA;AACrB,IAAA,IAAI,QAAQ,KAAA,GAAQ,aAAA,GAAgB,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,CAAA,KAAuC;AAC5E,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACD;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,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;AACA,MAAA;AAAA,IACD;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AAClC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwC;AAC5D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,aAAA,CACf,OAAA,CAAQ,MAAM,CAAA,CACd,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CACjB,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,SAAA,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,IAAA,WAAA,CAAY,SAAS,CAAA;AACrB,IAAA,UAAA,CAAW,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAC,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,uBACCC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,eAAA,EAAiB,KAAA,IAAS,iBAAiB,CAAA,EAC5D,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,sBACnBA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MAEA,GAAA,EAAK,CAAC,EAAA,KAAO;AACZ,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,MACxB,CAAA;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,KAAA,EAAO,KAAA;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,EAAG,EAAE,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,MACzD,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpC,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAA,EAAO;AAAA,MAChC,YAAA,EAAY,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA,QACV,qBAAA;AAAA,QACA,KAAA,IAAS,4BAAA;AAAA,QACT,KAAA,IAAS;AAAA;AACV,KAAA;AAAA,IAlBK;AAAA,GAoBN,CAAA,EACF,CAAA;AAEF;ACnGA,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,OAAA,GAAU,CAAA;AAET,SAAS,kBAAA,CAAmB;AAAA,EAClC,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA,GAAkB,CAAA;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAA4B;AAC3B,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAII,eAAS,EAAE,CAAA;AACjC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,gBAAA,GAAmBC,aAAsB,IAAI,CAAA;AACnD,EAAA,MAAM,cAAA,GAAiBA,aAA2B,MAAS,CAAA;AAE3D,EAAAN,gBAAU,MAAM;AACf,IAAA,IAAI,mBAAmB,CAAA,EAAG;AAC1B,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,MAAM;AACjC,MAAA,MAAA,CAAO,EAAE,CAAA;AACT,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,IAC5B,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,GAAA,CAAI,SAAS,OAAA,EAAS;AACzB,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,IAC5B;AAAA,EACD,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,WAAW,SAAA,EAAW;AACzB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAA,gBAAU,MAAM;AACf,IAAA,IACC,GAAA,CAAI,WAAW,OAAA,IACf,CAAC,QAAQ,IAAA,CAAK,GAAG,CAAA,IACjB,MAAA,KAAW,SAAA,EACV;AACD,MAAA;AAAA,IACD;AACA,IAAA,IAAI,gBAAA,CAAiB,YAAY,GAAA,EAAK;AACtC,IAAA,gBAAA,CAAiB,OAAA,GAAU,GAAA;AAC3B,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,KAAK,SAAA,CAAU,SAAA,EAAW,GAAG,CAAA,CAAE,MAAM,MAAM;AAC1C,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,SAAA,EAAW,GAAA,EAAK,MAAM,CAAC,CAAA;AAEtC,EAAAA,gBAAU,MAAM;AACf,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,OAAO,cAAA,CAAe,OAAA,KAAY,QAAA,EAAU;AAC/C,QAAA,MAAA,CAAO,aAAA,CAAc,eAAe,OAAO,CAAA;AAAA,MAC5C;AAAA,IACD,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsBD,kBAAY,MAAM;AAC7C,IAAA,YAAA,CAAa,iBAAiB,CAAA;AAC9B,IAAA,IAAI,OAAO,cAAA,CAAe,OAAA,KAAY,QAAA,EAAU;AAC/C,MAAA,MAAA,CAAO,aAAA,CAAc,eAAe,OAAO,CAAA;AAAA,IAC5C;AACA,IAAA,cAAA,CAAe,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,MAAM;AACjD,MAAA,YAAA,CAAa,CAAC,CAAA,KAAM;AACnB,QAAA,IAAI,KAAK,CAAA,EAAG;AACX,UAAA,IAAI,OAAO,cAAA,CAAe,OAAA,KAAY,QAAA,EAAU;AAC/C,YAAA,MAAA,CAAO,aAAA,CAAc,eAAe,OAAO,CAAA;AAC3C,YAAA,cAAA,CAAe,OAAA,GAAU,MAAA;AAAA,UAC1B;AACA,UAAA,OAAO,CAAA;AAAA,QACR;AACA,QAAA,OAAO,CAAA,GAAI,CAAA;AAAA,MACZ,CAAC,CAAA;AAAA,IACF,GAAG,GAAI,CAAA;AAAA,EACR,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,kBAAY,YAAY;AAC5C,IAAA,IAAI,SAAA,GAAY,CAAA,IAAK,MAAA,KAAW,WAAA,IAAe,YAAA,EAAc;AAC7D,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,IAAI;AACH,MAAA,MAAM,SAAS,SAAS,CAAA;AACxB,MAAA,mBAAA,EAAoB;AAAA,IACrB,CAAA,SAAE;AACD,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA,EAAG,CAAC,YAAA,EAAc,SAAA,EAAW,UAAU,SAAA,EAAW,mBAAA,EAAqB,MAAM,CAAC,CAAA;AAE9E,EAAA,MAAM,YAAA,GAAeA,kBAAY,YAAY;AAC5C,IAAA,IAAI,MAAA,KAAW,eAAe,YAAA,EAAc;AAC5C,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,IAAI;AACH,MAAA,MAAM,SAAS,SAAS,CAAA;AAAA,IACzB,CAAA,SAAE;AACD,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,GAAG,CAAC,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU,MAAM,CAAC,CAAA;AAE9C,EAAA,MAAM,IAAA,GAAO,WAAW,WAAA,IAAe,YAAA;AAEvC,EAAA,IAAI,MAAA,KAAW,UAAA,IAAc,MAAA,KAAW,UAAA,EAAY;AACnD,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,uBACCI,eAAAA;AAAA,IAACC,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACA,SAAA,EAAU,wBAAA;AAAA,MACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,MAE1D,QAAA,EAAA;AAAA,wBAAAD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACV,6BAAA;AAAA,cACA,IAAA,IAAQ;AAAA,aACT;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACd,QAAA,EAAA;AAAA,gCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACd,QAAA,EAAA;AAAA,kCAAAF,cAAAA;AAAA,oBAACyB,uBAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,6BAAA;AAAA,sBACV,IAAA,EAAM,EAAA;AAAA,sBACN,WAAA,EAAa,IAAA;AAAA,sBACb,aAAA,EAAW;AAAA;AAAA,mBACZ;AAAA,kCACAzB,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAA+B,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,kBACjD,MAAA,CAAO,UAAU,IAAA,mBACjBA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCACd,QAAA,EAAA,MAAA,CAAO,MAAA,EACT,IACG,MAAA,CAAO,SAAA,mBACVA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8BAAA,EACd,QAAA,EAAA,MAAA,CAAO,WACT,CAAA,GACG;AAAA,iBAAA,EACL,CAAA;AAAA,gCACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAqC,QAAA,EAAA,2CAAA,EAElD,CAAA;AAAA,gCACAA,cAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAO,GAAA;AAAA,oBACP,QAAA,EAAU,MAAA;AAAA,oBACV,SAAA,EAAW,OAAA;AAAA,oBACX,QAAA,EAAU,IAAA;AAAA,oBACV,KAAA,EAAO;AAAA;AAAA;AACR,eAAA,EACD,CAAA;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCACd,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACA,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,mCAAA;AAAA,kBACV,QAAA,EAAU,IAAA;AAAA,kBACV,OAAA,EAAS,MAAM,KAAK,YAAA,EAAa;AAAA,kBACjC,QAAA,EAAA;AAAA;AAAA,eAED,EACD;AAAA;AAAA;AAAA,SACD;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,oCAAA;AAAA,YACV,QAAA,EAAU,QAAQ,SAAA,GAAY,CAAA;AAAA,YAC9B,OAAA,EAAS,MAAM,KAAK,YAAA,EAAa;AAAA,YAEhC,QAAA,EAAA,SAAA,GAAY,CAAA,GAAI,CAAA,QAAA,EAAW,SAAS,CAAA,EAAA,CAAA,GAAO;AAAA;AAAA;AAC7C;AAAA;AAAA,GACD;AAEF;AC/LA,IAAM,gBAAA,GAAmB,GAAA;AAMlB,IAAM,aAAA,GAAgB0B,gBAAA;AAAA,EAC5B,SAASC,cAAAA,CACR;AAAA,IACC,QAAA;AAAA,IACA,aAAa,YAAA,GAAe,KAAA;AAAA,IAC5B,gBAAA,GAAmB,KAAA;AAAA,IACnB,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,UAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,KAED,GAAA,EACC;AACD,IAAA,MAAM,SAAA,GAAYtB,aAAuB,IAAI,CAAA;AAC7C,IAAA,MAAM,cAAA,GAAiBA,aAAuB,IAAI,CAAA;AAClD,IAAA,MAAM,eAAA,GAAkBA,aAAO,IAAI,CAAA;AACnC,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAID,eAAS,KAAK,CAAA;AACxD,IAAA,MAAM,YAAA,GAAeC,YAAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAC3C,IAAA,MAAM,6BAAA,GAAgCA,aAAO,KAAK,CAAA;AAClD,IAAA,MAAM,kBAAA,GAAqBA,aAAO,IAAI,CAAA;AACtC,IAAA,MAAM,uBAAA,GAA0BA,aAAO,KAAK,CAAA;AAE5C,IAAA,MAAM,qBAAA,GAAwBP,kBAAY,MAAM;AAC/C,MAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,MAAA,IAAI,CAAC,IAAI,OAAO,CAAA;AAChB,MAAA,OAAO,EAAA,CAAG,YAAA,GAAe,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,YAAA;AAAA,IAC5C,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,cAAA,GAAiBA,iBAAAA;AAAA,MACtB,CAAC,WAA2B,QAAA,KAAa;AACxC,QAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,QAAA,IAAI,CAAC,EAAA,EAAI;AACT,QAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAClC,QAAA,6BAAA,CAA8B,OAAA,GAAU,KAAA;AACxC,QAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAC7B,QAAA,EAAA,CAAG,SAAS,EAAE,GAAA,EAAK,EAAA,CAAG,YAAA,EAAc,UAAU,CAAA;AAC9C,QAAA,MAAM,QAAQ,MAAM;AACnB,UAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAAA,QACnC,CAAA;AACA,QAAA,IAAI,aAAa,SAAA,EAAW;AAC3B,UAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,QAC5B,CAAA,MAAO;AACN,UAAA,UAAA,CAAW,OAAO,GAAG,CAAA;AAAA,QACtB;AAAA,MACD,CAAA;AAAA,MACA;AAAC,KACF;AAEA,IAAA8B,yBAAA;AAAA,MACC,GAAA;AAAA,MACA,OAAO;AAAA,QACN,cAAA,EAAgB,CAAC,QAAA,GAA2B,QAAA,KAAa;AACxD,UAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAC1B,UAAA,6BAAA,CAA8B,OAAA,GAAU,KAAA;AACxC,UAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAC7B,UAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,UAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,QACxB;AAAA,OACD,CAAA;AAAA,MACA,CAAC,cAAc;AAAA,KAChB;AAEA,IAAA,MAAM,YAAA,GAAe9B,kBAAY,MAAM;AACtC,MAAA,MAAM,WAAW,qBAAA,EAAsB;AACvC,MAAA,MAAM,aAAa,QAAA,IAAY,gBAAA;AAC/B,MAAA,eAAA,CAAgB,OAAA,GAAU,UAAA;AAC1B,MAAA,gBAAA,CAAiB,CAAC,UAAU,CAAA;AAE5B,MAAA,IAAI,wBAAwB,OAAA,EAAS;AAErC,MAAA,IAAI,CAAC,UAAA,EAAY;AAChB,QAAA,kBAAA,CAAmB,OAAA,GAAU,KAAA;AAC7B,QAAA,6BAAA,CAA8B,OAAA,GAAU,IAAA;AAAA,MACzC;AAAA,IACD,CAAA,EAAG,CAAC,qBAAqB,CAAC,CAAA;AAE1B,IAAAC,gBAAU,MAAM;AACf,MAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,MAAA,YAAA,CAAa,UAAU,QAAA,CAAS,MAAA;AAChC,MAAA,IAAI,QAAA,CAAS,SAAS,SAAA,EAAW;AAChC,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,QAAA,IAAI,IAAA,EAAM,SAAS,MAAA,EAAQ;AAC1B,UAAA,6BAAA,CAA8B,OAAA,GAAU,KAAA;AACxC,UAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAC7B,UAAA,qBAAA,CAAsB,MAAM,gBAAgB,CAAA;AAAA,QAC7C,CAAA,MAAA,IACC,CAAC,6BAAA,CAA8B,OAAA,IAC/B,mBAAmB,OAAA,EAClB;AACD,UAAA,qBAAA,CAAsB,MAAM,cAAA,CAAe,SAAS,CAAC,CAAA;AAAA,QACtD;AAAA,MACD;AAAA,IACD,CAAA,EAAG,CAAC,QAAA,CAAS,MAAA,EAAQ,cAAc,CAAC,CAAA;AAEpC,IAAAA,gBAAU,MAAM;AACf,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,SAAS,WAAA,EAAa;AAC3B,MAAA,IAAI,8BAA8B,OAAA,EAAS;AAC3C,MAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AACjC,MAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAClC,MAAA,EAAA,CAAG,YAAY,EAAA,CAAG,YAAA;AAClB,MAAA,qBAAA,CAAsB,MAAM;AAC3B,QAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAAA,MACnC,CAAC,CAAA;AAAA,IACF,CAAC,CAAA;AAED,IAAAA,gBAAU,MAAM;AACf,MAAA,MAAM,QAAQ,cAAA,CAAe,OAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,MAAM,iBAAiB,MAAM;AAC5B,QAAA,IAAI,8BAA8B,OAAA,EAAS;AAC3C,QAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AACjC,QAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,QAAA,IAAI,CAAC,EAAA,EAAI;AACT,QAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAClC,QAAA,EAAA,CAAG,YAAY,EAAA,CAAG,YAAA;AAClB,QAAA,qBAAA,CAAsB,MAAM;AAC3B,UAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAAA,QACnC,CAAC,CAAA;AAAA,MACF,CAAA;AAEA,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,MAAM;AACnC,QAAA,cAAA,EAAe;AAAA,MAChB,CAAC,CAAA;AACD,MAAA,EAAA,CAAG,QAAQ,KAAK,CAAA;AAChB,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACxB,QAAA,UAAA,CAAW,MAAM,cAAA,CAAe,SAAS,CAAA,EAAG,EAAE,CAAA;AAAA,MAC/C;AAAA,IAED,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACCG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACd,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,SAAA;AAAA,UACL,QAAA,EAAU,YAAA;AAAA,UACV,SAAA,EAAU,8CAAA;AAAA,UAEV,QAAA,kBAAAE,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,GAAA,EAAK,cAAA;AAAA,cACL,SAAA,EAAU,gCAAA;AAAA,cAET,QAAA,EAAA;AAAA,gBAAA,gBAAA,oBACAF,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACA,SAAA,EAAU,gCAAA;AAAA,oBACV,IAAA,EAAK,QAAA;AAAA,oBACL,WAAA,EAAU,QAAA;AAAA,oBACV,YAAA,EAAW,sBAAA;AAAA,oBAEX,QAAA,kBAAAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACA,aAAA,EAAW,IAAA;AAAA,wBACX,SAAA,EAAU;AAAA;AAAA;AACX;AAAA,iBACD;AAAA,gBAEA,CAAC,gBAAA,IAAoB,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACnCA,cAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA,OAAA,CAAQ,IAAA,KAAS,MAAA,mBACjBA,cAAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACA,OAAA;AAAA,oBACA,MAAA,EAAQ,iBAAA;AAAA,oBACR,OAAA,EAAS,kBAAA;AAAA,oBACT,aAAA;AAAA,oBACA,SAAS,cAAA,EAAgB;AAAA;AAAA,oCAG1BA,cAAAA;AAAA,kBAAC,kBAAA;AAAA,kBAAA;AAAA,oBACA,OAAA;AAAA,oBACA,YAAA;AAAA,oBACA,qBAAA;AAAA,oBACA,SAAS,cAAA,EAAgB;AAAA;AAAA,iBAC1B,EAAA,EAfQ,OAAA,CAAQ,EAiBlB,CACA,CAAA;AAAA,gBAEA,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,UAAA,IAAc,UAAA,CAAW,WAAW,UAAA,oBACxEA,cAAAA,CAAC,KAAA,EAAA,EACA,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,kBAAA;AAAA,kBAAA;AAAA,oBACA,WAAW,UAAA,CAAW,SAAA;AAAA,oBACtB,QAAQ,UAAA,CAAW,MAAA;AAAA,oBACnB,QAAQ,UAAA,CAAW,MAAA;AAAA,oBACnB,iBAAiB,UAAA,CAAW,eAAA;AAAA,oBAC5B,SAAA,EAAW,oBAAoB,YAAY;AAAA,oBAAC,CAAA,CAAA;AAAA,oBAC5C,QAAA,EAAU,mBAAmB,YAAY;AAAA,oBAAC,CAAA,CAAA;AAAA,oBAC1C,QAAA,EAAU,mBAAmB,YAAY;AAAA,oBAAC,CAAA;AAAA;AAAA,iBAC3C,EACD;AAAA;AAAA;AAAA;AAEF;AAAA,OACD;AAAA,sBAEAA,cAAAA,CAACC,4BAAAA,EAAA,EACC,2CACAD,cAAAA;AAAA,QAACG,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UACzB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,UAC7B,SAAA,EAAU,4BAAA;AAAA,UAEV,QAAA,kBAAAH,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,SAAS,MAAM;AACd,gBAAA,cAAA,EAAe;AAAA,cAChB,CAAA;AAAA,cACA,SAAA,EAAU,gCAAA;AAAA,cACV,YAAA,EAAW,kBAAA;AAAA,cAEX,QAAA,kBAAAA,eAAC6B,qBAAA,EAAA,EAAU,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,EAAG;AAAA;AAAA;AAC9C;AAAA,OACD,EAEF;AAAA,KAAA,EACD,CAAA;AAAA,EAEF;AACD,CAAA;ACzMO,IAAM,WAAA,GAAcH,gBAAAA;AAAA,EAC1B,SAASI,YAAAA,CACR;AAAA,IACC,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,WAAA,GAAc,KAAA;AAAA,IACd,WAAA,GAAc,UAAA;AAAA,IACd,WAAA,GAAc,KAAA;AAAA,IACd,cAAA,GAAiB,KAAA;AAAA,IACjB,WAAA,GAAc,KAAA;AAAA,IACd,YAAA;AAAA,IACA,eAAA,GAAkB,EAAA;AAAA,IAClB,gBAAA,GAAmB,KAAA;AAAA,IACnB,cAAA;AAAA,IACA,oBAAA,GAAuB,IAAA;AAAA,IACvB,qBAAA,GAAwB,IAAA;AAAA,IACxB,oBAAA,GAAuB,IAAA;AAAA,IACvB,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA,GAAmB,IAAA;AAAA,IACnB,cAAA;AAAA,IACA,cAAA,GAAiB;AAAA,KAElB,GAAA,EACC;AACD,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI1B,eAAS,EAAE,CAAA;AACrC,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpD,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9D,IAAA,MAAM,WAAA,GAAcC,aAA4B,IAAI,CAAA;AACpD,IAAA,MAAM,UAAA,GAAaA,aAAuB,IAAI,CAAA;AAC9C,IAAA,MAAM,gBAAA,GAAmBA,aAAO,EAAE,CAAA;AAClC,IAAA,MAAM,oBAAA,GAAuBA,YAAAA;AAAA,MAC5B;AAAA,KACD;AACA,IAAA,MAAM,uBAAA,GAA0BA,aAAO,KAAK,CAAA;AAE5C,IAAA,MAAM,gBAAgB,QAAA,IAAY,WAAA;AAClC,IAAA,MAAM,uBAAuB,qBAAA,IAAyB,oBAAA;AACtD,IAAA,MAAM,2BAA2B,oBAAA,IAAwB,oBAAA;AACzD,IAAA,MAAM,eAAA,GAAkB,eAAe,YAAA,IAAgB,IAAA;AACvD,IAAA,MAAM,qBAAA,GAAwB,YAAY,CAAC,cAAA;AAE3C,IAAAN,gBAAU,MAAM;AACf,MAAA,IAAI,YAAY,OAAA,EAAS;AACxB,QAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACnC,QAAA,MAAM,YAAA,GAAe,YAAY,OAAA,CAAQ,YAAA;AACzC,QAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,GAAA,CAAI,YAAA,EAAc,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,MAClE;AAAA,IACD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,QAAA,EAAU;AACb,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,cAAA,CAAe,KAAK,CAAA;AACpB,QAAA,WAAA,CAAY,SAAS,IAAA,EAAK;AAC1B,QAAA;AAAA,MACD;AACA,MAAA,MAAM,UAAU,qBAAA,CAAsB,MAAM,WAAA,CAAY,OAAA,EAAS,OAAO,CAAA;AACxE,MAAA,OAAO,MAAM,qBAAqB,OAAO,CAAA;AAAA,IAC1C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,IAAA6B,yBAAAA;AAAA,MACC,GAAA;AAAA,MACA,OAAO;AAAA,QACN,QAAA,EAAU,CAAC,OAAA,KAAoB;AAC9B,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAA,QAAA,CAAS,OAAO,CAAA;AAChB,UAAA,qBAAA,CAAsB,MAAM;AAC3B,YAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,YAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AAC3B,YAAA,QAAA,CAAS,KAAA,EAAM;AACf,YAAA,MAAM,MAAM,OAAA,CAAQ,MAAA;AACpB,YAAA,QAAA,CAAS,iBAAA,CAAkB,KAAK,GAAG,CAAA;AAAA,UACpC,CAAC,CAAA;AAAA,QACF;AAAA,OACD,CAAA;AAAA,MACA,CAAC,QAAQ;AAAA,KACV;AAEA,IAAA7B,gBAAU,MAAM;AACf,MAAA,IAAI,CAAC,WAAA,EAAa;AAClB,MAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC7C,QAAA,IACC,UAAA,CAAW,WACX,CAAC,UAAA,CAAW,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAC5C;AACD,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACrB;AAAA,MACD,CAAA;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,IAC1E,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,CAAC,wBAAA,EAA0B;AAC9B,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACrB;AAAA,IACD,CAAA,EAAG,CAAC,wBAAwB,CAAC,CAAA;AAE7B,IAAAA,gBAAU,MAAM;AACf,MAAA,OAAO,MAAM;AACZ,QAAA,IAAI,qBAAqB,OAAA,EAAS;AACjC,UAAA,YAAA,CAAa,qBAAqB,OAAO,CAAA;AAAA,QAC1C;AAAA,MACD,CAAA;AAAA,IACD,CAAA,EAAG,EAAE,CAAA;AAEL,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,CAAC,wBAAwB,OAAA,EAAS;AACtC,MAAA,MAAM,OAAO,gBAAA,CAAiB,OAAA;AAC9B,MAAA,MAAM,SAAA,GAAY,QAAQ,CAAC,IAAA,CAAK,SAAS,GAAG,CAAA,IAAK,kBAAkB,GAAA,GAAM,EAAA;AACzE,MAAA,QAAA,CAAS,GAAG,IAAI,CAAA,EAAG,SAAS,CAAA,EAAG,eAAe,CAAA,CAAE,CAAA;AAAA,IACjD,CAAA,EAAG,CAAC,WAAA,EAAa,eAAe,CAAC,CAAA;AAEjC,IAAA,MAAM,UAAA,GAAaD,kBAAY,MAAM;AACpC,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,IAAK,QAAA,EAAU;AAC/B,MAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAClC,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAC3B,MAAA,cAAA,IAAiB;AACjB,MAAA,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACnB,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,qBAAA,CAAsB,MAAM;AAC3B,QAAA,IAAI,YAAY,OAAA,EAAS;AACxB,UAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACnC,UAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAAA,QAC3B;AAAA,MACD,CAAC,CAAA;AAAA,IACF,GAAG,CAAC,KAAA,EAAO,QAAA,EAAU,cAAA,EAAgB,MAAM,CAAC,CAAA;AAE5C,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAgD;AACtE,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACrC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAI,eAAe,cAAA,EAAgB;AACnC,QAAA,UAAA,EAAW;AAAA,MACZ;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,yBAAyB,MAAM;AACpC,MAAA,kBAAA,IAAqB;AACrB,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACrB,CAAA;AAEA,IAAA,MAAM,wBAAwB,MAAM;AACnC,MAAA,iBAAA,IAAoB;AACpB,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACrB,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmBA,kBAAY,MAAM;AAC1C,MAAA,IAAI,qBAAqB,OAAA,EAAS;AACjC,QAAA,YAAA,CAAa,qBAAqB,OAAO,CAAA;AACzC,QAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,MAChC;AACA,MAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,IAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,sBAAA,GAAyBA,kBAAY,MAAM;AAChD,MAAA,IAAI,yBAAyB,WAAA,EAAa;AAC1C,MAAA,IAAI,qBAAqB,OAAA,EAAS;AACjC,QAAA,YAAA,CAAa,qBAAqB,OAAO,CAAA;AAAA,MAC1C;AACA,MAAA,oBAAA,CAAqB,OAAA,GAAU,WAAW,MAAM;AAC/C,QAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,QAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,MAChC,GAAG,GAAI,CAAA;AAAA,IACR,CAAA,EAAG,CAAC,WAAA,EAAa,qBAAqB,CAAC,CAAA;AAEvC,IAAA,MAAM,oBAAoB,MAAM;AAC/B,MAAA,gBAAA,EAAiB;AACjB,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,IAAI,CAAC,gBAAgB,qBAAA,EAAuB;AAC5C,MAAA,IAAI,CAAC,WAAA,EAAa;AACjB,QAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAC3B,QAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAAA,MACnC;AACA,MAAA,YAAA,EAAa;AAAA,IACd,CAAA;AAEA,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,KAAK,CAAC,QAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,IAAW,WAAA;AAEjC,IAAA,uBACCI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACV,yBAAA;AAAA,YAAA,CACC,aAAa,WAAA,KAAgB;AAAA,WAC/B;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,8BAAAF,eAACC,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACxB,8CACAC,eAAAA;AAAA,gBAACC,mBAAAA,CAAO,GAAA;AAAA,gBAAP;AAAA,kBACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,kBAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,kBAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,kBAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,kBAC9C,SAAA,EAAU,gCAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA;AAAA,sCAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACf,0BAAAA,cAAAA,CAACW,kBAAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,IAAM,CAAA,EAC3C,CAAA;AAAA,sCACAX,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAE7C;AAAA,qBAAA,EACD,CAAA;AAAA,oBAEC,kCACAA,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACA,IAAA,EAAK,QAAA;AAAA,wBACL,OAAA,EAAS,cAAA;AAAA,wBACT,SAAA,EAAU,+BAAA;AAAA,wBACV,YAAA,EAAW,sBAAA;AAAA,wBAEX,QAAA,kBAAAA,eAAC+B,aAAA,EAAA,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAG,EAAG;AAAA;AAAA;AACtC;AAAA;AAAA,eAEF,EAEF,CAAA;AAAA,8BAEA/B,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACA,GAAA,EAAK,WAAA;AAAA,kBACL,KAAA;AAAA,kBACA,QAAA,EAAU,CAAC,CAAA,KAAM;AAChB,oBAAA,IAAI,WAAA,EAAa;AACjB,oBAAA,MAAM,SAAA,GAAY,EAAE,MAAA,CAAO,KAAA;AAC3B,oBAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAClC,oBAAA,QAAA,CAAS,SAAS,CAAA;AAClB,oBAAA,IAAI,gBAAA,IAAoB,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC/C,sBAAA,cAAA,IAAiB;AAAA,oBAClB;AAAA,kBACD,CAAA;AAAA,kBACA,SAAA,EAAW,aAAA;AAAA,kBACX,SAAS,MAAM;AACd,oBAAA,IAAI,CAAC,QAAA,EAAU,YAAA,CAAa,IAAI,CAAA;AAAA,kBACjC,CAAA;AAAA,kBACA,MAAA,EAAQ,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,kBAChC,WAAA,EAAa,CAAC,CAAA,KAAM;AACnB,oBAAA,IAAI,QAAA,IAAY,cAAA,EAAe;AAAA,kBAChC,CAAA;AAAA,kBACA,eAAA,EAAe,QAAA;AAAA,kBACf,QAAA,EAAU,aAAA;AAAA,kBACV,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,kBAC1B,WAAA,EAAa,cAAc,iBAAA,GAAe,WAAA;AAAA,kBAC1C,SAAA,EAAU,0BAAA;AAAA,kBACV,eAAA,EAAe,WAAW,MAAA,GAAS,OAAA;AAAA,kBACnC,IAAA,EAAM;AAAA;AAAA;AACP,aAAA,EACD,CAAA;AAAA,4BAEAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACd,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,gBAAA,gBAAA,IAAoB,kCACpBA,eAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACA,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,cAAA;AAAA,oBACT,UAAU,WAAA,IAAe,WAAA;AAAA,oBACzB,SAAA,EAAU,iCAAA;AAAA,oBACV,YAAA,EAAW,aAAA;AAAA,oBACX,KAAA,EAAM,aAAA;AAAA,oBAEN,QAAA,EAAA;AAAA,sCAAAF,cAAAA;AAAA,wBAACY,qBAAAA;AAAA,wBAAA;AAAA,0BACA,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,aAAa,IAAA;AAAK;AAAA,uBACnD;AAAA,sCACAZ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAsC,QAAA,EAAA,aAAA,EAEtD;AAAA;AAAA;AAAA,iBACD;AAAA,gBAGA,wBAAA,oBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAW,EAAG,GAAA,EAAK,UAAA,EAC1C,QAAA,EAAA;AAAA,kCAAAF,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACA,IAAA,EAAK,QAAA;AAAA,sBACL,SAAS,MAAM,cAAA,CAAe,CAAC,OAAA,KAAY,CAAC,OAAO,CAAA;AAAA,sBACnD,UAAU,QAAA,IAAY,WAAA;AAAA,sBACtB,SAAA,EAAW,EAAA;AAAA,wBACV,4BAAA;AAAA,wBACA,WAAA,IAAe;AAAA,uBAChB;AAAA,sBACA,YAAA,EAAW,QAAA;AAAA,sBAEX,QAAA,kBAAAA,cAAAA;AAAA,wBAACgC,gBAAA;AAAA,wBAAA;AAAA,0BACA,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,aAAa,CAAA;AAAE;AAAA;AAChD;AAAA,mBACD;AAAA,kCAEAhC,cAAAA,CAACC,4BAAAA,EAAA,EACC,yCACAC,eAAAA;AAAA,oBAACC,mBAAAA,CAAO,GAAA;AAAA,oBAAP;AAAA,sBACA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,sBACzC,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,sBACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,sBACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,sBAC7B,SAAA,EAAU,6BAAA;AAAA,sBAET,QAAA,EAAA;AAAA,wBAAA,qBAAA,oBACAD,eAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,IAAA,EAAK,QAAA;AAAA,4BACL,SAAA,EAAU,+BAAA;AAAA,4BACV,OAAA,EAAS,sBAAA;AAAA,4BAET,QAAA,EAAA;AAAA,8CAAAF,cAAAA;AAAA,gCAACiC,qBAAA;AAAA,gCAAA;AAAA,kCACA,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,kCAC/B,SAAA,EAAU;AAAA;AAAA,+BACX;AAAA,8BAAE;AAAA;AAAA;AAAA,yBAEH;AAAA,wBAEA,wCACA/B,eAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,IAAA,EAAK,QAAA;AAAA,4BACL,SAAA,EAAU,+BAAA;AAAA,4BACV,OAAA,EAAS,qBAAA;AAAA,4BAET,QAAA,EAAA;AAAA,8CAAAF,cAAAA;AAAA,gCAACkC,qBAAA;AAAA,gCAAA;AAAA,kCACA,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,kCAC/B,SAAA,EAAU;AAAA;AAAA,+BACX;AAAA,8BAAE;AAAA;AAAA;AAAA;AAEH;AAAA;AAAA,mBAEF,EAEF;AAAA,iBAAA,EACD,CAAA;AAAA,gBAGA,eAAA,oBACAhC,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,YAAW,EAClC,QAAA,EAAA;AAAA,kCAAAF,eAACC,4BAAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACxB,8CACAD,cAAAA;AAAA,oBAACG,mBAAAA,CAAO,GAAA;AAAA,oBAAP;AAAA,sBACA,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,sBACzC,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,sBACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,sBACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,sBAC9C,SAAA,EAAU,+BAAA;AAAA,sBAEV,QAAA,kBAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA;AAAA,wBAAA,sBAAA;AAAA,wCAEtDF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC;AAAA,uBAAA,EACtD;AAAA;AAAA,mBACD,EAEF,CAAA;AAAA,kCAEAE,eAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACA,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,iBAAA;AAAA,sBACT,YAAA,EAAc,sBAAA;AAAA,sBACd,YAAA,EAAc,gBAAA;AAAA,sBACd,OAAA,EAAS,sBAAA;AAAA,sBACT,MAAA,EAAQ,gBAAA;AAAA,sBACR,QAAA,EAAU,qBAAA;AAAA,sBACV,SAAA,EAAW,EAAA;AAAA,wBACV,yBAAA;AAAA,wBACA,WAAA,IAAe;AAAA,uBAChB;AAAA,sBACA,YAAA,EAAY,cAAc,gBAAA,GAAmB,aAAA;AAAA,sBAE7C,QAAA,EAAA;AAAA,wCAAAF,cAAAA,CAACmC,mBAAI,KAAA,EAAO,EAAE,OAAO,EAAA,EAAI,MAAA,EAAQ,IAAG,EAAG,CAAA;AAAA,wBACtC,WAAA,oBACAnC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC;AAAA;AAAA;AAAA;AAElD,iBAAA,EACD;AAAA,eAAA,EAEF,CAAA;AAAA,cAEC,CAAC,cAAA,oBACDA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCACd,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACA,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,UAAA;AAAA,kBACT,QAAA,EAAU,YAAA;AAAA,kBACV,SAAA,EAAW,EAAA;AAAA,oBACV,0BAAA;AAAA,oBACA,YAAA,IAAgB;AAAA,mBACjB;AAAA,kBACA,YAAA,EAAW,cAAA;AAAA,kBAEX,QAAA,kBAAAA,cAAAA;AAAA,oBAACoC,mBAAA;AAAA,oBAAA;AAAA,sBACA,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,aAAa,GAAA,EAAI;AAAA,sBACjD,SAAA,EAAU;AAAA;AAAA;AACX;AAAA,eACD,EACD;AAAA,aAAA,EAEF;AAAA;AAAA;AAAA,OACD;AAAA,sBAEApC,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,sDAAA,EAE1C;AAAA,KAAA,EACD,CAAA;AAAA,EAEF;AACD,CAAA;ACzbO,SAAS,eAAA,CAAgB,EAAE,GAAA,EAAK,GAAA,EAAK,SAAQ,EAAyB;AAC5E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAII,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAExD,EAAAL,gBAAU,MAAM;AACf,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,gBAAU,MAAM;AACf,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,aAAA,GAAgBD,iBAAAA;AAAA,IACrB,CAAC,CAAA,KAAqB;AACrB,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACT;AAEA,EAAAC,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,QAAA,KAAa,WAAA,EAAa;AAE7C,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAE/B,IAAA,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACrD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAAA,IAChC,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,GAAA,EAAK,aAAa,CAAC,CAAA;AAEvB,EAAA,MAAM,iBAAiB,MAAM;AAC5B,IAAA,IAAI,CAAC,GAAA,IAAO,OAAO,QAAA,KAAa,WAAA,EAAa;AAC7C,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,IAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,IAAA,CAAA,CAAE,QAAA,GAAW,GAAA,CAAI,IAAA,EAAK,GAAI,GAAA,GAAM,OAAA;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,KAAA,EAAM;AACR,IAAA,CAAA,CAAE,MAAA,EAAO;AAAA,EACV,CAAA;AAEA,EAAA,IAAI,CAAC,SAAA,IAAa,OAAO,QAAA,KAAa,WAAA,EAAa;AAClD,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,OAAOO,qBAAAA;AAAA,oBACNN,cAAAA,CAACC,4BAAAA,EAAA,EACC,gCACAC,eAAAA;AAAA,MAACC,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QAEA,SAAA,EAAU,oBAAA;AAAA,QACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACnB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,QAC7B,OAAA,EAAS,OAAA;AAAA,QACT,IAAA,EAAK,cAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACd,QAAA,EAAA;AAAA,4BAAAF,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,wBAAA;AAAA,gBACV,YAAA,EAAW,UAAA;AAAA,gBACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACf,kBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,kBAAA,cAAA,EAAe;AAAA,gBAChB,CAAA;AAAA,gBAEA,0BAAAA,cAAAA,CAACqC,oBAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,aACrC;AAAA,4BACArC,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,wBAAA;AAAA,gBACV,YAAA,EAAW,OAAA;AAAA,gBACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACf,kBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,kBAAA,OAAA,EAAQ;AAAA,gBACT,CAAA;AAAA,gBAEA,0BAAAA,cAAAA,CAAC+B,aAAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA;AAC9B,WAAA,EACD,CAAA;AAAA,0BAEA7B,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,SAAA,EAAU,4BAAA;AAAA,cACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,cAClC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,MAAA;AAAA,cACX,cAAY,GAAA,IAAO,eAAA;AAAA,cAElB,QAAA,EAAA;AAAA,gBAAA,CAAC,aAAA,mBACDA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACd,QAAA,EAAA;AAAA,kCAAAF,cAAAA;AAAA,oBAACc,mBAAAA;AAAA,oBAAA;AAAA,sBACA,IAAA,EAAM,EAAA;AAAA,sBACN,WAAA,EAAa,CAAA;AAAA,sBACb,aAAA,EAAa,IAAA;AAAA,sBACb,KAAA,EAAO;AAAA,wBACN,KAAA,EAAO,0BAAA;AAAA,wBACP,SAAA,EAAW;AAAA;AACZ;AAAA,mBACD;AAAA,kCACAd,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAkC,QAAA,EAAA,eAAA,EAE/C;AAAA,iBAAA,EACD,CAAA,GACG,IAAA;AAAA,gCAEJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCACd,QAAA,kBAAAA,cAAAA;AAAA,kBAACG,mBAAAA,CAAO,GAAA;AAAA,kBAAP;AAAA,oBACA,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,oBACnC,OAAA,EAAS;AAAA,sBACR,KAAA,EAAO,gBAAgB,CAAA,GAAI,IAAA;AAAA,sBAC3B,OAAA,EAAS,gBAAgB,CAAA,GAAI;AAAA,qBAC9B;AAAA,oBACA,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,oBAChC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,oBAC5B,KAAA,EAAO;AAAA,sBACN,OAAA,EAAS,MAAA;AAAA,sBACT,MAAA,EAAQ,MAAA;AAAA,sBACR,KAAA,EAAO,MAAA;AAAA,sBACP,UAAA,EAAY,QAAA;AAAA,sBACZ,cAAA,EAAgB;AAAA,qBACjB;AAAA,oBAEA,QAAA,kBAAAH,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACA,SAAA,EAAU,wBAAA;AAAA,wBACV,GAAA;AAAA,wBACA,GAAA;AAAA,wBACA,SAAA,EAAW,KAAA;AAAA,wBACX,MAAA,EAAQ,MAAM,gBAAA,CAAiB,IAAI;AAAA;AAAA;AACpC;AAAA,iBACD,EACD;AAAA;AAAA;AAAA;AACD;AAAA,OAAA;AAAA,MApFK;AAAA,QAsFH,IAAA,EACL,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACV;AACD;AC/IA,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,GAAaa,aAAAA;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,GAAIT,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,EAAAL,gBAAU,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,GAAWD,iBAAAA;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,iBAAAA;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,GAAIM,cAAAA,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,GAAcC,aAA+B,IAAI,CAAA;AACvD,EAAA,MAAM,SAAA,GAAYA,aAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,EAAA,MAAM,SAAA,GAAYP,iBAAAA;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,MAAMwC,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,GAAUxC,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,EAAAC,gBAAU,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,gBAAU,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,GAAIK,eAAkB,MAAM;AACvD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,OAAO,UAAA,GAAa,iBAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAAL,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,GAAuBM,aAAuB,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACvDD,cAAAA,CAA2B,EAAE,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,MAAA,EAAQ,OAAA,EAAS,kBAAkB,CAAA;AAErE,EAAAL,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,uBACCG,gBAAC,KAAA,EAAA,EAAI,GAAA,EAAK,sBAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,EAAW,EAC3D,QAAA,EAAA;AAAA,MAAA,CAAC,8BACDF,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,CAACuC,2BAAA,EAAA,EAAgB,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,OAC5B,EACD,CAAA;AAAA,sBAEDvC,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,CAAC,CAAA,KAAM;AACvB,YAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,YAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,UACzB;AAAA;AAAA;AACD,KAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,uBACCA,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,GAAeK,aAAsD,IAAI,CAAA;AAC/E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,aAAA,GAAgBN,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,EAAAC,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,uBACCC,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,uBACCE,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,wBAAAF,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,GAAII,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,aAAA,GAAgBC,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,EAAAN,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,uBACCG,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,wBAAAF,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,CAACwC,yBAAA,EAAA,EAAc,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SAC1B;AAAA,QAEC,6BACAtC,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,8BAAAF,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,CAAC,CAAA,KAAM;AACvB,oBAAA,eAAA,CAAgB,CAAC,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,OAAOM,qBAAAA;AAAA,oBACNN,cAAAA;AAAA,MAACG,mBAAAA,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,kBAAAD,eAAAA;AAAA,UAACC,mBAAAA,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,8BAAAH,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,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACd,QAAA,EAAA;AAAA,oBAAAF,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,CAAC+B,aAAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA,mBAAK/B,cAAAA,CAACyC,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,GAAUpC,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,EAAE,UAAU,OAAA,EAAS,SAAA,EAAW,OAAO,QAAA,EAAU,OAAA,EAAS,SAAQ,GACvE,OAAA;AAED,EAAA,MAAM,eAAeQ,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,uBACCb,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,uBACCE,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,oBAC7BF,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,qBACnBE,eAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEA,SAAA,EAAU,sBAAA;AAAA,YACV,cAAY,KAAA,CAAM,KAAA;AAAA,YAElB,QAAA,EAAA;AAAA,8BAAAF,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,CAAC,CAAA,qBACpBA,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBAEA,OAAA,EAAS,CAAA;AAAA,kBACT,QAAA,EAAU,EAAE,SAAA,KAAc,eAAA;AAAA,kBAC1B,SAAA,EAAW,EAAE,SAAA,KAAc,gBAAA;AAAA,kBAC3B,WAAA,EAAa,mBAAA,EAAqB,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA,IAAK,KAAA;AAAA,kBACtD,mBAAA,EACC,2BAAA,EAA6B,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA,IAAK,KAAA;AAAA,kBAElD,QAAA,EAAU;AAAA,iBAAA;AAAA,gBARL,CAAA,CAAE;AAAA,eAUR,CAAA,EACF;AAAA;AAAA,WAAA;AAAA,UAnBK,KAAA,CAAM;AAAA,SAqBZ,CAAA;AAAA,QACA,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,OAAA,oBACvBA,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,mBACCE,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,0DAAA;AAAA,QACV,aAAA,EAAW,IAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAF,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,CAACO,iBAAAA,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,mBACCP,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,kBAAAE,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACf,QAAA,EAAA;AAAA,wBAAAF,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,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,IAAA,EACrD,QAAA,kBAAAA,cAAAA,CAAC0C,yBAAA,EAAA,EAAc,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACA1C,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,uBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,IAAA,EACrD,QAAA,kBAAAA,cAAAA,CAACQ,uBAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EACxB,CAAA;AAAA,oBACAR,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,sBAAMA,cAAAA,CAACY,qBAAAA,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,uBACCZ,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,QAAA,EAAA,SAAA,mBACAA,cAAAA,CAAC,OAAA,EAAA,EAAQ,oBAETE,eAAAA,CAAAO,qBAAA,EACE,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDT,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;AC9wBA,IAAM,mBAAA,GAAsB,sBAAA;AAC5B,IAAM,wBAAA,GAA2B,uBAAA;AACjC,IAAM,oBAAA,GAAyC,EAAE,KAAA,EAAO,OAAA,EAAQ;AAChE,IAAM,gBAAA,GAAmB,kBAAA;AACzB,IAAM2C,kBAAAA,GAAoB,GAAA;AAE1B,SAAS,mBAAA,GAA+B;AACvC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIvC,eAAkB,MAAM;AACvD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,OAAO,UAAA,GAAauC,kBAAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA5C,gBAAU,MAAM;AACf,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe4C,kBAAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA+B,WAAA,CAAY,MAAM,OAAO,CAAA;AAC1E,IAAA,WAAA,CAAY,IAAI,OAAO,CAAA;AACvB,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,QAAA;AACR;AAEA,SAAS,eAAe,CAAA,EAAkJ;AACzK,EAAA,IAAI,CAAA,KAAM,MAAM,OAAO,EAAE,SAAS,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AACpD,EAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,SAAiB,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,EAAE;AACnE,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,EAAC,EAAE;AACtC;AAEA,SAAS,qBAAqB,CAAA,EAI5B;AACD,EAAA,IAAI,CAAA,KAAM,OAAO,OAAO,EAAE,UAAU,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,KAAA,EAAM;AACjF,EAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAY,IAAA,EAAK;AAChG,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA,EAAM;AACxC,IAAA,MAAM,GAAA,GAAM,CAAA;AACZ,IAAA,MAAM,WAAA,GAAc,IAAI,WAAA,KAAgB,KAAA;AACxC,IAAA,MAAM,UAAA,GAAa,IAAI,UAAA,KAAe,KAAA;AACtC,IAAA,OAAO,EAAE,QAAA,EAAU,WAAA,IAAe,UAAA,EAAY,aAAa,UAAA,EAAW;AAAA,EACvE;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAC9D;AAEA,SAAS,wBACR,CAAA,EACuD;AACvD,EAAA,IAAI,CAAA,KAAM,MAAM,OAAO,EAAE,SAAS,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AACpD,EAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,SAAiB,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,EAAE;AACnE,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,EAAC,EAAE;AACtC;AAMA,SAAS,sBAAA,CACR,WACA,MAAA,EACgB;AAChB,EAAA,MAAM,YAAA,GAAetC,YAAAA,CAA2B,EAAE,CAAA;AAClD,EAAA,MAAM,YAAA,GAAeA,aAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AAEvB,EAAA,MAAM,gBAAA,GAAmB,OAAO,OAAA,EAAS,SAAA;AACzC,EAAA,MAAM,UAAA,GAAa,OAAO,GAAA,EAAK,OAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,OAAO,QAAA,EAAU,IAAA;AACtC,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,EAAS,KAAA,EAAO,EAAA;AAE9C,EAAAN,gBAAU,MAAM;AACf,IAAA,YAAA,CAAa,QAAQ,YAAA,GAAe,YAAA;AACpC,IAAA,YAAA,CAAa,QAAQ,cAAA,GAAiB,cAAA;AACtC,IAAA,IAAI,gBAAA,EAAkB;AACrB,MAAA,YAAA,CAAa,QAAQ,SAAA,GAAY,gBAAA;AAAA,IAClC;AACA,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,YAAA,CAAa,QAAQ,UAAA,GACpB,UAAA,CAAW,8BAA8B,CAAA,IAAK,aAAa,OAAA,CAAQ,UAAA;AACpE,MAAA,YAAA,CAAa,QAAQ,aAAA,GACpB,UAAA,CAAW,iCAAiC,CAAA,IAAK,aAAa,OAAA,CAAQ,aAAA;AAAA,IACxE;AAAA,EACD,GAAG,CAAC,YAAA,EAAc,cAAA,EAAgB,gBAAA,EAAkB,UAAU,CAAC,CAAA;AAE/D,EAAAA,gBAAU,MAAM;AACf,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,cAAA,IAAkB,2BAAA;AAC9C,IAAA,OAAO,gBAAA,CAAiB,QAAA,EAAU,CAAC,KAAA,KAAU;AAC5C,MAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,KAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,CAAO,GAAA,CAAI,cAAc,CAAC,CAAA;AAE9B,EAAA,OAAOc,aAAAA;AAAA,IACN,OAAO;AAAA,MACN,eAAe,CAAC,GAAA,KAAQ,YAAA,CAAa,OAAA,EAAS,gBAAgB,GAAG,CAAA;AAAA,MACjE,aAAA,EAAe,MAAM,YAAA,CAAa,OAAA,EAAS,aAAA,IAAgB;AAAA,MAC3D,gBAAA,EAAkB,CAAC,OAAA,KAA4B;AAC9C,QAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,YAAA,CAAa,OAAA,CAAQ,cAAc,OAAA,CAAQ,WAAA;AACpE,QAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,YAAA,CAAa,OAAA,CAAQ,YAAY,OAAA,CAAQ,SAAA;AAEhE,QAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,EAAA;AACnC,QAAA,MAAM,eAAA,GACL,OAAA,CAAQ,MAAA,IAAU,EAAA,KAAO,OAAA,CAAQ,SAAS,YAAY,CAAA,IAAK,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,CAAA;AACvF,QAAA,MAAM,cAAA,GACL,CAAC,OAAA,CAAQ,WAAA,IACT,CAAC,OAAA,CAAQ,WAAA,IACT,OAAA,CAAQ,MAAA,KAAW,CAAA,KAClB,OAAA,CAAQ,cAAA,KAAmB,WAAA,IAAe,QAAQ,cAAA,KAAmB,OAAA,CAAA;AACvE,QAAA,MAAM,WAAA,GAAc,CAAC,CAAC,uBAAA,CAAwB,QAAQ,YAAY,CAAA;AAClE,QAAA,MAAM,cAAA,GAAiB,uBAAA,CAAwB,OAAA,CAAQ,YAAY,CAAA;AAEnE,QAAA,MAAM,aAAA,GACL,OAAA,CAAQ,OAAA,IAAW,WAAA,IAAe,kBAAkB,eAAA,IAAmB,cAAA;AAExE,QAAA,IAAI,aAAA,EAAe;AAClB,UAAA,YAAA,CAAa,QAAQ,KAAA,GACpB,OAAO,WAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW,MAAA;AAC5D,UAAA,kBAAA;AAAA,YACC,CAAA,gBAAA,EAAmB,OAAA,CAAQ,YAAA,IAAgB,OAAA,IAAW,eAAe,CAAA,CAAA;AAAA,YACrE,EAAE,GAAG,YAAA,CAAa,OAAA;AAAQ,WAC3B;AAAA,QACD;AAEA,QAAA,YAAA,CAAa,OAAA,EAAS,mBAAmB,OAAO,CAAA;AAAA,MACjD,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAiB;AAC1B,QAAA,YAAA,CAAa,QAAQ,KAAA,GACpB,OAAO,WAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW,MAAA;AAC5D,QAAA,kBAAA,CAAmB,KAAA,EAAO,EAAE,GAAG,YAAA,CAAa,SAAS,CAAA;AACrD,QAAA,YAAA,CAAa,OAAA,EAAS,UAAU,KAAK,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,SAAA,KAAsB;AACzC,QAAA,YAAA,CAAa,QAAQ,SAAA,GAAY,SAAA;AACjC,QAAA,YAAA,CAAa,OAAA,EAAS,oBAAoB,SAAS,CAAA;AAAA,MACpD,CAAA;AAAA,MACA,uBAAuB,CAAC,IAAA,KAAS,YAAA,CAAa,OAAA,EAAS,wBAAwB,IAAI,CAAA;AAAA,MACnF,cAAA,EAAgB,MAAM,YAAA,CAAa,OAAA,EAAS,cAAA,IAAiB;AAAA,MAC7D,kBAAA,EAAoB,MAAM,YAAA,CAAa,OAAA,EAAS,kBAAA,IAAqB;AAAA,MACrE,iBAAA,EAAmB,MAAM,YAAA,CAAa,OAAA,EAAS,iBAAA,IAAoB;AAAA,MACnE,sBAAsB,CAAC,GAAA,KAAQ,YAAA,CAAa,OAAA,EAAS,uBAAuB,GAAG,CAAA;AAAA,MAC/E,iBAAA,EAAmB,CAAC,MAAA,EAAQ,GAAA,KAAQ,aAAa,OAAA,EAAS,iBAAA,GAAoB,QAAQ,GAAG;AAAA,KAC1F,CAAA;AAAA;AAAA,IAEA;AAAC,GACF;AACD;AAMO,IAAM,UAAA,GAAaa,gBAAAA,CAA2C,SAASkB,WAAAA,CAC7E;AAAA,EACC,MAAA;AAAA,EACA,YAAY,EAAC;AAAA,EACb,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA,EAAoB,mBAAA;AAAA,EACpB,qBAAA,EAAuB,sBAAA;AAAA,EACvB,eAAA,EAAiB;AAClB,CAAA,EACA,GAAA,EACC;AAKD,EAAA7C,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,CAAO,eAAe,SAAA,EAAW;AACpC,MAAA,kBAAA,CAAmB,MAAA,CAAO,cAAc,SAAS,CAAA;AAAA,IAClD;AAAA,EACD,CAAA,EAAG,CAAC,MAAA,CAAO,aAAA,EAAe,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,mBAAmB,mBAAA,EAAoB;AAK7C,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIK,eAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,yBAAA,EAA2B,4BAA4B,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChF,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,yBAAA,EAA2B,4BAA4B,CAAA,GAC7DA,eAA2C,IAAI,CAAA;AAIhD,EAAA,MAAM,CAAC,qBAAqB,sBAAsB,CAAA,GAAIA,eAEpD,sBAAM,IAAI,KAAK,CAAA;AAGjB,EAAA,MAAM,CAAC,6BAA6B,8BAA8B,CAAA,GACjEA,eAA8B,sBAAM,IAAI,KAAK,CAAA;AAC9C,EAAA,MAAM,0BAAA,GAA6BC,YAAAA;AAAA,wBAC9B,GAAA;AAAI,GACT;AACA,EAAA,MAAM,8BAAA,GAAiC,GAAA;AAEvC,EAAA,MAAM,oBAAA,GAAuBP,iBAAAA,CAAY,CAAC,SAAA,KAAsB;AAC/D,IAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAChC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG,OAAO,IAAA;AAChC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,8BAAA,CAA+B,CAAC,IAAA,KAAS;AACxC,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAS,GAAG,OAAO,IAAA;AACjC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,0BAAA,CAA2B,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACtE,IAAA,IAAI,aAAA,EAAe;AAClB,MAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,MAAA,0BAAA,CAA2B,OAAA,CAAQ,OAAO,SAAS,CAAA;AAAA,IACpD;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAA,GAAuBA,iBAAAA,CAAY,CAAC,SAAA,KAAsB;AAC/D,IAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAS,GAAG,OAAO,IAAA;AACjC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,8BAAA,CAA+B,CAAC,IAAA,KAAS;AACxC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,0BAAA,CAA2B,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACtE,IAAA,IAAI,aAAA,eAA4B,aAAa,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC9B,MAAA,8BAAA,CAA+B,CAAC,IAAA,KAAS;AACxC,QAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAS,GAAG,OAAO,IAAA;AACjC,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AACrB,QAAA,OAAO,IAAA;AAAA,MACR,CAAC,CAAA;AACD,MAAA,0BAAA,CAA2B,OAAA,CAAQ,OAAO,SAAS,CAAA;AAAA,IACpD,GAAG,8BAA8B,CAAA;AACjC,IAAA,0BAAA,CAA2B,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,KAAK,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAAA;AAAA,IACC,MAAM,MAAM;AACX,MAAA,KAAA,MAAW,KAAA,IAAS,0BAAA,CAA2B,OAAA,CAAQ,MAAA,EAAO,EAAG;AAChE,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACnB;AACA,MAAA,0BAAA,CAA2B,QAAQ,KAAA,EAAM;AAAA,IAC1C,CAAA;AAAA,IACA;AAAC,GACF;AACA,EAAA,MAAM,cAAA,GAAiBM,aAA0B,IAAI,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmBA,aAA4B,IAAI,CAAA;AACzD,EAAA,MAAM,oBAAA,GAAuBA,aAAO,KAAK,CAAA;AACzC,EAAA,MAAM,kBAAA,GAAqBA,YAAAA;AAAA,IAC1B,OAAO,OAAA,EAAS;AAAA,GACjB;AACA,EAAA,MAAM,0BAAA,GAA6BA,aAA2B,MAAS,CAAA;AAEvE,EAAA,MAAM,2BAAA,GAA8BP,iBAAAA,CAAY,CAAC,OAAA,KAA4B;AAC5E,IAAA,MAAM,aAAa,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACrD,IAAA,IAAI,CAAC,YAAY,OAAO,gBAAA;AACxB,IAAA,OAAO,UAAA,CAAW,MAAA,IAAU,EAAA,GACzB,UAAA,GACA,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,OAAA,EAAS,CAAA,GAAA,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkB,sBAAA,CAAuB,SAAA,EAAW,MAAM,CAAA;AAChE,EAAA,MAAM,eAAA,GAAkBe,aAAAA;AAAA,IACvB,OAAO;AAAA,MACN,GAAG,eAAA;AAAA,MACH,aAAA,EAAe,CAAC,OAAA,KAAY;AAC3B,QAAA,eAAA,CAAgB,gBAAgB,OAAO,CAAA;AACvC,QAAA,MAAM,YAAY,kBAAA,CAAmB,OAAA;AACrC,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,0BAAA,CAA2B,OAAA,GAAU,SAAA;AACrC,QAAA,oBAAA,CAAqB,SAAS,CAAA;AAC9B,QAAA,4BAAA,CAA6B;AAAA,UAC5B,KAAK,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,UACvC,SAAA;AAAA,UACA,aAAA,EAAA,iBAAe,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACtC,YAAA,EAAc,4BAA4B,OAAO;AAAA,SACjD,CAAA;AAAA,MACF,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,SAAA,KAAc;AACjC,QAAA,MAAM,oBAAoB,kBAAA,CAAmB,OAAA;AAC7C,QAAA,kBAAA,CAAmB,OAAA,GAAU,SAAA;AAC7B,QAAA,eAAA,CAAgB,oBAAoB,SAAS,CAAA;AAC7C,QAAA,IACC,iBAAA,IACA,sBAAsB,SAAA,EACrB;AAID,UAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAChC,YAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,iBAAiB,GAAG,OAAO,IAAA;AACzC,YAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,YAAA,IAAA,CAAK,OAAO,iBAAiB,CAAA;AAC7B,YAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAClB,YAAA,OAAO,IAAA;AAAA,UACR,CAAC,CAAA;AAAA,QACF;AACA,QAAA,IACC,iBAAA,IACA,iBAAA,KAAsB,SAAA,IACtB,0BAAA,CAA2B,YAAY,iBAAA,EACtC;AACD,UAAA,0BAAA,CAA2B,OAAA,GAAU,SAAA;AACrC,UAAA,4BAAA;AAAA,YAA6B,CAAC,SAC7B,IAAA,GACG;AAAA,cACA,GAAG,IAAA;AAAA,cACH,KAAK,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,cACvC,SAAA;AAAA,cACA;AAAA,aACA,GACA;AAAA,cACA,KAAK,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,cACvC,SAAA;AAAA,cACA,iBAAA;AAAA,cACA,aAAA,EAAA,iBAAe,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,cACtC,YAAA,EAAc;AAAA;AACd,WACJ;AAAA,QACD;AAAA,MACD,CAAA;AAAA,MACA,gBAAA,EAAkB,CAAC,OAAA,KAAY;AAC9B,QAAA,eAAA,CAAgB,mBAAmB,OAAO,CAAA;AAC1C,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,kBAAA,CAAmB,OAAA;AAC1D,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,oBAAA,CAAqB,SAAS,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAU;AACnB,QAAA,eAAA,CAAgB,UAAU,KAAK,CAAA;AAG/B,QAAA,MAAM,YAAY,kBAAA,CAAmB,OAAA;AACrC,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAChC,UAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAS,GAAG,OAAO,IAAA;AACjC,UAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,UAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AACrB,UAAA,OAAO,IAAA;AAAA,QACR,CAAC,CAAA;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACA;AAAA,MACC,2BAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA;AACD,GACD;AACA,EAAA,MAAM,IAAA,GAAOgC,gCAAA,CAAU,MAAA,EAAQ,eAAe,CAAA;AAE9C,EAAA,MAAM;AAAA,IACL,QAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,GAAI,IAAA;AAEJ,EAAA9C,gBAAU,MAAM;AACf,IAAA,IAAI,qBAAqB,OAAA,EAAS;AACjC,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC1B,QAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,QAAA,oBAAA,CAAqB,OAAA,GAAU,KAAA;AAAA,MAChC;AACA,MAAA;AAAA,IACD;AACA,IAAA,IAAI,SAAS,MAAA,GAAS,CAAA,IAAK,CAAC,kBAAA,wBAA0C,IAAI,CAAA;AAAA,EAC3E,CAAA,EAAG,CAAC,QAAA,CAAS,MAAA,EAAQ,kBAAkB,CAAC,CAAA;AAExC,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACvB,IAAA,MAAM,cAAc,QAAA,CAAS,IAAA;AAAA,MAC5B,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,gBAAA,IAAoB,EAAE,IAAA,KAAS;AAAA,KAChD;AACA,IAAA,IAAI,CAAC,WAAA,EAAa,mBAAA,CAAoB,IAAI,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,gBAAA,EAAkB,QAAQ,CAAC,CAAA;AAK/B,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,EAAC;AACzB,EAAA,MAAM,YAAA,GAAe,OAAO,YAAA,IAAgB,oBAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,EAAA,CAAG,KAAA,EAAO,WAAA,IAAe,mBAAA;AAC7C,EAAA,MAAM,cAAA,GAAiB,EAAA,CAAG,UAAA,EAAY,IAAA,IAAQ,wBAAA;AAC9C,EAAA,MAAM,kBAAA,GAAqB,EAAA,CAAG,UAAA,EAAY,IAAA,IAAQ,IAAA;AAClD,EAAA,MAAM,mBAAA,GAAsB,GAAG,UAAA,EAAY,OAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,EAAA,CAAG,KAAA,EAAO,eAAA,IAAmB,KAAA;AACrD,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,EAAA,CAAG,KAAA,EAAO,KAAc,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,uBAAA,CAAwB,EAAA,CAAG,cAAuB,CAAA;AACzE,EAAA,MAAM,oBAAA,GAAuB,GAAG,QAAA,EAAU,OAAA;AAM1C,EAAA,MAAM,cAAA,GAAiBc,aAAAA;AAAA,IACtB,OAAO;AAAA,MACN,kBAAA,EAAoB;AAAA,QACnB,IAAA,EAAM,oBAAA,EAAsB,kBAAA,EAAoB,IAAA,IAAQ,IAAA;AAAA,QACxD,IAAA,EAAM,oBAAA,EAAsB,kBAAA,EAAoB,IAAA,IAAQ,KAAA;AAAA,QACxD,KAAA,EAAO,oBAAA,EAAsB,kBAAA,EAAoB,KAAA,IAAS;AAAA,OAC3D;AAAA,MACA,uBAAA,EAAyB;AAAA,QACxB,IAAA,EAAM,oBAAA,EAAsB,uBAAA,EAAyB,IAAA,IAAQ,IAAA;AAAA,QAC7D,KAAA,EAAO,oBAAA,EAAsB,uBAAA,EAAyB,KAAA,IAAS;AAAA;AAChE,KACD,CAAA;AAAA,IACA,CAAC,oBAAoB;AAAA,GACtB;AAKA,EAAA,MAAM;AAAA,IACL,eAAA;AAAA,IACA,WAAA,EAAa,cAAA;AAAA,IACb,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,GAAIiC,+BAAA;AAAA,IACH;AAAA,MACC,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,IAAQ,OAAA;AAAA,MAC5B,cAAA,EAAgB,KAAA,CAAM,OAAA,CAAQ,cAAA,KAAmB,KAAA;AAAA,MACjD,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe;AAAA,KAC1C;AAAA,IACA;AAAA,MACC,OAAO,MAAM;AAAA,MAAC,CAAA;AAAA,MACd,OAAA,EAAS,CAAC,KAAA,KAAU;AACnB,QAAA,OAAA,CAAQ,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAAA,MACpC;AAAA;AACD,GACD;AAEA,EAAA,MAAM,gBAAA,GAAmBhD,kBAAY,YAAY;AAChD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,IAAI,WAAA,EAAa;AAChB,MAAA,aAAA,EAAc;AACd,MAAA;AAAA,IACD;AACA,IAAA,eAAA,EAAgB;AAChB,IAAA,MAAM,cAAA,EAAe;AAAA,EACtB,GAAG,CAAC,eAAA,EAAiB,aAAa,cAAA,EAAgB,aAAA,EAAe,cAAc,CAAC,CAAA;AAEhF,EAAA,MAAM,wBAAwB,MAAM;AACnC,IAAA,aAAA,EAAc;AACd,IAAA,eAAA,EAAgB;AAAA,EACjB,CAAA;AACA,EAAA,MAAM,yBAAyB,MAAM;AACpC,IAAA,aAAA,EAAc;AAAA,EACf,CAAA;AAKA,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,MAAM;AAC7C,IAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAC/B,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,4BAAA,CAA6B,KAAK,CAAA;AAClC,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,4BAAA,CAA6B,IAAI,CAAA;AACjC,IAAA,kBAAA,CAAmB,OAAA,GAAU,MAAA;AAC7B,IAAA,0BAAA,CAA2B,OAAA,GAAU,MAAA;AACrC,IAAA,cAAA,CAAe,OAAA,EAAS,SAAS,EAAE,CAAA;AACnC,IAAA,eAAA,EAAgB;AAChB,IAAA,IAAI,aAAa,aAAA,EAAc;AAC/B,IAAA,YAAA,EAAa;AACb,IAAA,SAAA,CAAU,cAAA,IAAiB;AAAA,EAC5B,CAAA,EAAG,CAAC,SAAA,CAAU,cAAA,EAAgB,iBAAiB,WAAA,EAAa,YAAA,EAAc,aAAa,CAAC,CAAA;AAExF,EAAA,MAAM,sBAAsBA,iBAAAA,CAAY,MAAM,6BAA6B,IAAI,CAAA,EAAG,EAAE,CAAA;AACpF,EAAA,MAAM,2BAA2BA,iBAAAA,CAAY,MAAM,6BAA6B,KAAK,CAAA,EAAG,EAAE,CAAA;AAK1F,EAAA,MAAM,YAAA,GAAee,aAAAA;AAAA,IACpB,OAAO;AAAA,MACN,YAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACA;AAAA,MACC,YAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACD,GACD;AAEA,EAAAe,yBAAAA;AAAA,IACC,GAAA;AAAA,IACA,OAAO;AAAA,MACN,YAAA,EAAc,mBAAA;AAAA,MACd,aAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACA,CAAC,mBAAA,EAAqB,aAAA,EAAe,YAAA,EAAc,YAAA,EAAc,aAAa,WAAW;AAAA,GAC1F;AAEA,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAIxB,eAAS,KAAK,CAAA;AAExE,EAAAL,gBAAU,MAAM;AACf,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAC/B,CAAA,EAAG;AAAA,IACF,gBAAgB,OAAA,EAAS,YAAA;AAAA,IACzB,eAAA,CAAgB,eAAA;AAAA,IAChB,eAAA,CAAgB;AAAA,GAChB,CAAA;AAKD,EAAA,IAAI,YAAA,CAAa,UAAU,UAAA,EAAY;AACtC,IAAA,uBACCC,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,cAClC,QAAA,kBAAAE,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,QAC/E,KAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,YAAA,CAAa,MAAA,oBACbF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,wCAE/C,CAAA,EACD;AAAA;AAAA;AAAA,KAEF,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,MAAM,UAAA,GAAa,aAAa,KAAA,KAAU,UAAA;AAK1C,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,EAAa,GAAA,KAAgB;AACtD,IAAA,cAAA,CAAe,GAAG,CAAA;AAClB,IAAA,cAAA,CAAe,GAAG,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAea,cAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,eAAA,CAAgB,OAAA,EAAS,OAAO,IAAA;AACrC,IAAA,MAAM,MAAM,eAAA,CAAgB,OAAA;AAC5B,IAAA,IAAI,MAAA,GAA+B,SAAA;AACnC,IAAA,IAAI,uBAAuB,MAAA,GAAS,WAAA;AAAA,SAAA,IAC3B,eAAA,CAAgB,MAAA,KAAW,UAAA,EAAY,MAAA,GAAS,UAAA;AAAA,SAAA,IAChD,eAAA,CAAgB,MAAA,KAAW,UAAA,EAAY,MAAA,GAAS,UAAA;AACzD,IAAA,OAAO;AAAA,MACN,WAAW,CAAA,GAAA,EAAM,GAAA,CAAI,YAAA,IAAgB,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,MAC/C,MAAA,EAAQ;AAAA,QACP,IAAA,EAAM,IAAI,cAAA,IAAkB,SAAA;AAAA,QAC5B,OAAA,EAAS,IAAI,OAAA,IAAW,oBAAA;AAAA,QACxB,MAAA,EAAQ,IAAI,QAAA,EAAU,MAAA;AAAA,QACtB,SAAA,EAAW,IAAI,QAAA,EAAU;AAAA,OAC1B;AAAA,MACA,MAAA;AAAA,MACA,iBAAiB,eAAA,CAAgB;AAAA,KAClC;AAAA,EACD,CAAA,EAAG;AAAA,IACF,eAAA,CAAgB,OAAA;AAAA,IAChB,eAAA,CAAgB,MAAA;AAAA,IAChB,eAAA,CAAgB,eAAA;AAAA,IAChB;AAAA,GACA,CAAA;AAED,EAAA,MAAM,+BACL,YAAA,IAAgB,IAAA,IAChB,aAAa,MAAA,KAAW,UAAA,IACxB,aAAa,MAAA,KAAW,UAAA;AAEzB,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiB;AACtC,IAAA,IAAI,aAAa,aAAA,EAAc;AAC/B,IAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AAChB,MAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,MAAA,KAAK,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,IAC7B;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyBf,iBAAAA;AAAA,IAC9B,CAAC,SAAA,KAAsB;AACtB,MAAA,MAAM,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AAC7D,MAAA,IAAI,CAAC,aAAA,EAAe,OAAA,CAAQ,IAAA,EAAK,EAAG;AACpC,MAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,MAAA,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACtD,MAAA,qBAAA,CAAsB,MAAM;AAC3B,QAAA,gBAAA,CAAiB,OAAA,EAAS,eAAe,QAAQ,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACV;AAEA,EAAA,MAAM,sBAAA,GAAyBA,iBAAAA;AAAA,IAC9B,CAAC,SAAA,KAAsB;AACtB,MAAA,IAAI,oBAAA,EAAsB;AAC1B,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,SAAA,IAAa,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA;AAC3E,MAAA,IAAI,CAAC,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAK,EAAG;AAC7B,MAAA,KAAK,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,MAAM,gBAAA,CAAiB,OAAA,EAAS,eAAe,SAAS,CAAA;AACrE,MAAA,qBAAA,CAAsB,MAAM;AAC3B,QAAA,IAAA,EAAK;AACL,QAAA,cAAA,CAAe,MAAM,MAAA,CAAO,UAAA,CAAW,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,oBAAA,EAAsB,QAAA,EAAU,WAAW;AAAA,GAC7C;AAEA,EAAA,MAAM,qBAAqBA,iBAAAA,CAAY,MAAM,oBAAoB,IAAI,CAAA,EAAG,EAAE,CAAA;AAE1E,EAAA,MAAM,OAAA,GAAU,SAAS,MAAA,KAAW,CAAA;AACpC,EAAA,MAAM,cAAA,GAAiB,WAAW,CAAC,kBAAA;AACnC,EAAA,MAAM,mBAAmB,YAAA,EAAa;AAEtC,EAAAC,gBAAU,MAAM;AACf,IAAA,kBAAA,CAAmB,OAAA,GAAU,gBAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAKrB,EAAA,MAAM,YAAA,GAAe,CAAC,UAAA,oBACrBC,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACA,GAAA,EAAK,cAAA;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,QAAA,EAAU,YAAA;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa,oBAAA;AAAA,MACb,WAAA,EAAa,cAAc,cAAA,GAAiB,WAAA;AAAA,MAC5C,aAAa,KAAA,CAAM,OAAA;AAAA,MACnB,eAAA,EAAiB,KAAA,CAAM,OAAA,GAAU,eAAA,GAAkB,EAAA;AAAA,MACnD,cAAA,EAAgB,MAAM,OAAA,IAAW,cAAA;AAAA,MACjC,WAAA;AAAA,MACA,YAAA,EAAc,KAAA,CAAM,OAAA,GAAU,gBAAA,GAAmB,MAAA;AAAA,MACjD,iBAAA,EAAmB,qBAAA;AAAA,MACnB,kBAAA,EAAoB,sBAAA;AAAA,MACpB,gBAAA,EAAkB,eAAA;AAAA,MAClB,cAAA,EAAgB,mBAAA;AAAA,MAChB,sBAAsB,WAAA,CAAY,QAAA;AAAA,MAClC,uBAAuB,WAAA,CAAY,WAAA;AAAA,MACnC,sBAAsB,WAAA,CAAY,UAAA;AAAA,MAClC,oBAAoB,SAAA,CAAU,kBAAA;AAAA,MAC9B,mBAAmB,SAAA,CAAU,iBAAA;AAAA,MAC7B,gBAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAChB,cAAA,EAAgB;AAAA;AAAA,GACjB;AAGD,EAAA,MAAM,mBAAA,GAAsBF,iBAAAA;AAAA,IAC3B,OAAO,OAAA,KAAmC;AAKzC,MAAA,IACC,OAAA,CAAQ,SAAA,KAAc,gBAAA,IACtB,OAAA,CAAQ,cAAc,gBAAA,EACrB;AACD,QAAA;AAAA,MACD;AAKA,MAAA,0BAAA,CAA2B,OAAA,GAAU,MAAA;AACrC,MAAA,kBAAA,CAAmB,UAAU,OAAA,CAAQ,SAAA;AAGrC,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,MAAA,IAAI;AACH,QAAA,MAAM,WAAA,CAAY,QAAQ,SAAS,CAAA;AAAA,MACpC,SAAS,GAAA,EAAK;AACb,QAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAAA,MAC5C;AAAA,IACD,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,WAAW;AAAA,GACjD;AAEA,EAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,OAAA,mBACrCE,cAAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,cAAA,CAAe,OAAA;AAAA,MACxB,eAAA,EAAiB,gBAAA;AAAA,MACjB,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,2BAAA;AAAA,MACA,kBAAA,EAAoB,yBAAA;AAAA,MACpB,eAAA,EAAiB,mBAAA;AAAA,MACjB,UAAA,EAAY,iBAAA;AAAA,MACZ,kBAAA,EAAoB;AAAA;AAAA,GACrB,GACG,IAAA;AAEJ,EAAA,MAAM,4BACLE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,uBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,aAAA,EAAe,mBAAmB,QAAA,GAAW,KAAA;AAAA,QAC7C,UAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,CAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,wBACDA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,IAAA,EAAM,QAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cACV,SAAA,EAAW,CAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,QAAA,EAAU,QAAA;AAAA,cACV,UAAA,EAAY,iBAAiB,QAAA,GAAW,SAAA;AAAA,cACxC,cAAA,EAAgB,iBAAiB,QAAA,GAAW;AAAA,aAC7C;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,cAAA,mBACAF,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACA,KAAA,EAAO;AAAA,oBACN,OAAA,EAAS,MAAA;AAAA,oBACT,aAAA,EAAe,QAAA;AAAA,oBACf,UAAA,EAAY,QAAA;AAAA,oBACZ,cAAA,EAAgB,QAAA;AAAA,oBAChB,KAAA,EAAO,MAAA;AAAA,oBACP,SAAA,EAAW,CAAA;AAAA,oBACX,SAAA,EAAW;AAAA,mBACZ;AAAA,kBAEA,QAAA,kBAAAA,cAAAA;AAAA,oBAAC+C,WAAAA;AAAA,oBAAA;AAAA,sBACA,IAAA,EAAM,cAAA;AAAA,sBACN,OAAA,EAAS,mBAAA;AAAA,sBACT,QAAA,EAAU;AAAA;AAAA;AACX;AAAA,kCAGD/C,cAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACA,GAAA,EAAK,gBAAA;AAAA,kBACL,QAAA;AAAA,kBACA,WAAA,EAAa,oBAAA;AAAA,kBACb,gBAAA,EAAkB,CAAC,CAAC,gBAAA;AAAA,kBACpB,iBAAA,EAAmB,sBAAA;AAAA,kBACnB,kBAAA,EAAoB,sBAAA;AAAA,kBACpB,YAAA,EAAc,gBAAA;AAAA,kBACd,uBAAuB,SAAA,CAAU,qBAAA;AAAA,kBACjC,cAAA;AAAA,kBACA,aAAA,EAAe,oBAAA;AAAA,kBACf,UAAA,EAAY,YAAA;AAAA,kBACZ,eAAA,EAAiB,OAAO,GAAA,EAAK,GAAA,KAAQ;AACpC,oBAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,oBAAA,IAAI;AACH,sBAAA,MAAM,kBAAkB,GAAG,CAAA;AAAA,oBAC5B,SAAS,KAAA,EAAO;AACf,sBAAA,wBAAA,CAAyB,KAAK,CAAA;AAC9B,sBAAA,MAAM,KAAA;AAAA,oBACP;AAAA,kBACD,CAAA;AAAA,kBACA,gBAAgB,YAAY;AAC3B,oBAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,oBAAA,IAAI;AACH,sBAAA,MAAM,gBAAA,EAAiB;AAAA,oBACxB,SAAS,KAAA,EAAO;AACf,sBAAA,wBAAA,CAAyB,KAAK,CAAA;AAC9B,sBAAA,MAAM,KAAA;AAAA,oBACP;AAAA,kBACD,CAAA;AAAA,kBACA,gBAAgB,YAAY;AAC3B,oBAAA,MAAM,SAAA,EAAU;AAAA,kBACjB;AAAA;AAAA,eACD;AAAA,8BAEDA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACA,KAAA,EAAO;AAAA,oBACN,KAAA,EAAO,MAAA;AAAA,oBACP,UAAA,EAAY;AAAA,mBACb;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA;AACF;AAAA;AAAA;AACD;AAAA;AAAA,GACD;AAGD,EAAA,uBACCA,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,cAClC,QAAA,kBAAAE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,CAAA;AAAA,QACX,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,QAAA;AAAA,QACV,GAAG;AAAA,OACJ;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,SAAA;AAAA,wBAEDF,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACA,GAAA,EAAK,WAAA;AAAA,YACL,GAAA,EAAK,WAAA;AAAA,YACL,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI;AAAA;AAAA,SACnC;AAAA,wBACAA,cAAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YACA,MAAA,EAAQ,yBAAA;AAAA,YACR,OAAA,EAAS,wBAAA;AAAA,YACT,SAAA,EAAW;AAAA;AAAA;AACZ;AAAA;AAAA,GACD,EACD,CAAA;AAEF,CAAC;AAMD,SAAS+C,WAAAA,CAAW;AAAA,EACnB,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,EAIG;AACF,EAAA,uBACC7C,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,SAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT,GAAA,EAAK,EAAA;AAAA,QACL,IAAA,EAAM,CAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,QAAA,IAAY,CAAC,OAAA,oBACbF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,aAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,cACN,KAAA,EAAO,EAAA;AAAA,cACP,MAAA,EAAQ,EAAA;AAAA,cACR,YAAA,EAAc,EAAA;AAAA,cACd,UAAA,EAAY;AAAA;AACb;AAAA,SACD;AAAA,wBAEDA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,KAAA,EAAO,+BAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACb;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACF;AAAA;AAAA,GACD;AAEF;AC16BO,SAAS,UAAA,CAAW;AAAA,EAC1B,SAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA,GAAmB,KAAA;AAAA,EACnB,eAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAAoB;AACnB,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAII,eAAS,KAAK,CAAA;AAE5D,EAAA,MAAM,sBAAsB,YAAY;AACvC,IAAA,IAAI,aAAa,eAAA,EAAiB;AACjC,MAAA,IAAI;AACH,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,SAAS,CAAA;AAC7C,QAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,QAAA,UAAA,CAAW,MAAM,kBAAA,CAAmB,KAAK,CAAA,EAAG,GAAI,CAAA;AAChD,QAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,MAC1B,SAAS,KAAA,EAAO;AACf,QAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAAA,MAClD;AAAA,IACD;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAA,IAAoB,CAAC,CAAC,QAAA;AAEzC,EAAA,uBACCF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,kDAAA;AAAA,QACA,gCAAA;AAAA,QACA,uDAAA;AAAA,QACA;AAAA,OACD;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,UAAA,eAAA,oBACAF,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACA,OAAA,EAAS,eAAA;AAAA,cACT,KAAA,EAAM,sBAAA;AAAA,cACN,SAAA,EAAU,WAAA;AAAA,cAEV,QAAA,kBAAAA,cAAAA,CAACgD,gBAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WAC3B;AAAA,0BAED9C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACd,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EAA+D,QAAA,EAAA,MAAA,EAE/E,CAAA;AAAA,YAEC,SAAA,oBACAA,cAAAA,CAACC,4BAAAA,EAAA,EACA,QAAA,kBAAAC,eAAAA;AAAA,cAACC,mBAAAA,CAAO,MAAA;AAAA,cAAP;AAAA,gBACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,gBACjC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,MAAA,EAAO;AAAA,gBACtC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,gBAC9B,OAAA,EAAS,mBAAA;AAAA,gBACT,SAAA,EAAU,sCAAA;AAAA,gBACV,KAAA,EAAO,SAAS,SAAS,CAAA,CAAA;AAAA,gBAEzB,QAAA,EAAA;AAAA,kCAAAH,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iIACd,QAAA,EAAA,SAAA,CAAU,MAAA,GAAS,KACjB,CAAA,EAAG,SAAA,CAAU,UAAU,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA,EAAI,SAAA,CAAU,MAAM,EAAE,CAAC,KACnD,SAAA,EACJ,CAAA;AAAA,kCACAA,cAAAA,CAACC,4BAAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EACpB,4CACAD,cAAAA;AAAA,oBAACG,mBAAAA,CAAO,IAAA;AAAA,oBAAP;AAAA,sBAEA,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,sBAClC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,sBAChC,IAAA,EAAM,EAAE,KAAA,EAAO,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,sBAE/B,QAAA,kBAAAH,cAAAA,CAACO,iBAAAA,EAAA,EAAM,WAAU,8BAAA,EAA+B;AAAA,qBAAA;AAAA,oBAL5C;AAAA,sCAQLP,cAAAA;AAAA,oBAACG,mBAAAA,CAAO,IAAA;AAAA,oBAAP;AAAA,sBAEA,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,sBAClC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,sBAChC,IAAA,EAAM,EAAE,KAAA,EAAO,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,sBAE/B,QAAA,kBAAAH,cAAAA,CAACU,gBAAAA,EAAA,EAAK,WAAU,0FAAA,EAA2F;AAAA,qBAAA;AAAA,oBALvG;AAAA,mBAML,EAEF;AAAA;AAAA;AAAA,aACD,EACD;AAAA,WAAA,EAEF;AAAA,SAAA,EACD,CAAA;AAAA,QAEC,UAAA,oBACAR,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,UAAA,gBAAA,IAAoB,gCACpBA,eAAAA,CAAC,gBAAa,OAAA,EAAS,YAAA,EAAc,OAAM,aAAA,EAC1C,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACY,qBAAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,4BACnCZ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAmB,QAAA,EAAA,OAAA,EAAK;AAAA,WAAA,EACzC,CAAA;AAAA,UAEA;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GAEF;AAEF;AAEA,IAAM,YAAA,GAAe0B,gBAAAA,CAGnB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACrC1B,cAAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACV,2DAAA;AAAA,MACA,2CAAA;AAAA,MACA,oCAAA;AAAA,MACA,0DAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,KACD;AAAA,IACC,GAAG,KAAA;AAAA,IAEH;AAAA;AACF,CACA,CAAA;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;;;;AChI3B,IAAMiD,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,qBAAAA,GAAuB,EAAA;AAC7B,IAAMC,oBAAAA,GAAsB,GAAA;AAC5B,IAAM,iBAAA,GAAoB,GAAA;AAEnB,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,GAAY9C,YAAAA,CAAoC,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAID,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,UAAA,GAAaC,aAAO,CAAC,CAAA;AAC3B,EAAA,MAAM,aAAA,GACL,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,SAAA,GAAY,CAAA,GACxC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW6C,qBAAoB,CAAA,GACxCD,mBAAAA;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,SACL,KAAA,CAAM,MAAA,KAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,KAAK,CAAA;AAErD,EAAAlD,gBAAU,MAAM;AACf,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM;AACrC,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IAC7B,GAAGoD,oBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAApD,gBAAU,MAAM;AACf,IAAA,IAAI,CAAA;AACJ,IAAA,IAAI,MAAA,IAAU,UAAA,CAAW,OAAA,GAAU,aAAA,EAAe;AACjD,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,CAAA,GAAI,MAAA,CAAO,UAAA;AAAA,QACV,MAAM,iBAAiB,KAAK,CAAA;AAAA,QAC5B;AAAA,OACD;AAAA,IACD;AACA,IAAA,UAAA,CAAW,UAAU,KAAA,CAAM,MAAA;AAC3B,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AAC1B,QAAA,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,MACtB;AAAA,IACD,CAAA;AAAA,EACD,GAAG,CAAC,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,aAAa,CAAC,CAAA;AAExC,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,IAAI,IAAA,IAAQ,CAAC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAChC,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AACnB,IAAA,WAAA,CAAY,SAAS,CAAA;AACrB,IAAA,IAAI,QAAQ,KAAA,GAAQ,aAAA,GAAgB,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CACrB,KAAA,EACA,CAAA,KACI;AACJ,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACD;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,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;AACA,MAAA;AAAA,IACD;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AAClC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA4B;AAChD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,aAAA,CACf,OAAA,CAAQ,MAAM,CAAA,CACd,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CACjB,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,SAAA,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,IAAA,WAAA,CAAY,SAAS,CAAA;AACrB,IAAA,UAAA,CAAW,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAC,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,uBACCC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,qBAAA;AAAA,QACA,KAAA,IAAS,kBAAA;AAAA,QACT,aAAA,IAAiB;AAAA,OAClB;AAAA,MACA,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAG;AAAA,MAEhB,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,sBACnBA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UAEA,GAAA,EAAK,CAAC,EAAA,KAAO;AACZ,YAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,UACxB,CAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,SAAA,EAAU,SAAA;AAAA,UACV,SAAA,EAAW,CAAA;AAAA,UACX,KAAA,EAAO,KAAA;AAAA,UACP,QAAA;AAAA,UACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,EAAG,EAAE,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,UACzD,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,UACpC,OAAA,EAAS,WAAA;AAAA,UACT,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAA,EAAO;AAAA,UAChC,YAAA,EAAY,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,UAC1B,SAAA,EAAW,EAAA;AAAA,YACV,sCAAA;AAAA,YACA,4BAAA;AAAA,YACA,yCAAA;AAAA,YACA,QAAA,IAAY,oBAAA;AAAA,YACZ,KAAA,IAAS;AAAA,WACV;AAAA,UACA,KAAA,EAAO;AAAA,YACN,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA;AACX,SAAA;AAAA,QAzBK;AAAA,OA2BN;AAAA;AAAA,GACF;AAEF;;;ACnKO,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;AC5BA,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,GAAII,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,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAYC,aAA8B,IAAI,CAAA;AACpD,EAAA,MAAM,kBAAA,GAAqBA,aAA2B,IAAI,CAAA;AAC1D,EAAA,MAAM,oBAAA,GAAuBA,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,EAAA,MAAM,gBAAA,GAAmBP,kBAAY,MAAM;AAC1C,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,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,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,MAC7C;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,CAAW,gBAAA,EAAkB,yBAAyB,CAAA;AACtE,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EAClC,GAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAGvD,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;AAGD,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,kBAAA,CAAmB,UAAU,QAAA,CAAS,aAAA;AACtC,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAE/B,IAAA,MAAM,YAAA,GAAe,MACpB,KAAA,CAAM,IAAA;AAAA,MACL,MAAA,CAAO,gBAAA;AAAA,QACN;AAAA;AACD,KACD,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,CAAC,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA,IAAK,EAAA,CAAG,QAAA,KAAa,EAAE,CAAA;AAEpE,IAAA,MAAM,aAAa,YAAA,EAAa;AAChC,IAAA,CAAC,UAAA,CAAW,CAAC,CAAA,IAAK,MAAA,EAAQ,KAAA,EAAM;AAEhC,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC3C,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACvB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA;AAAA,MACD;AACA,MAAA,IAAI,CAAA,CAAE,QAAQ,KAAA,EAAO;AACrB,MAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AAClB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAA,CAAO,KAAA,EAAM;AACb,QAAA;AAAA,MACD;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,MAAM,SAAS,QAAA,CAAS,aAAA;AACxB,MAAA,MAAM,QAAA,GAAW,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,KAAA;AACpD,MAAA,IAAI,EAAE,QAAA,EAAU;AACf,QAAA,IAAI,CAAC,QAAA,IAAY,MAAA,KAAW,KAAA,EAAO;AAClC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAA,CAAK,KAAA,EAAM;AAAA,QACZ;AAAA,MACD,CAAA,MAAO;AACN,QAAA,IAAI,CAAC,QAAA,IAAY,MAAA,KAAW,IAAA,EAAM;AACjC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,KAAA,EAAM;AAAA,QACb;AAAA,MACD;AAAA,IACD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACrD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAC/B,MAAA,kBAAA,CAAmB,SAAS,KAAA,EAAM;AAAA,IACnC,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,YAAA,GAAeD,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,IAER,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,MAAA,IAAU,CAAC,iBAAA,EAAmB,OAAO,IAAA;AAE1C,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;AAEhD,EAAA,uBACCI,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,uBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAU,sFAAA;AAAA,YACV,aAAA,EAAW,IAAA;AAAA,YACX,KAAA,EAAO;AAAA,cACN,UAAA,EACC;AAAA;AACF;AAAA,SACD;AAAA,wBAEAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,UAAA,EAAY,CAAA;AAAA,cACZ,KAAA,EAAO,MAAA;AAAA,cACP,QAAA,EAAU,GAAA;AAAA,cACV,QAAA,EAAU;AAAA,aACX;AAAA,YAEA,QAAA,kBAAAE,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,GAAA,EAAK,SAAA;AAAA,gBACL,IAAA,EAAK,QAAA;AAAA,gBACL,YAAA,EAAW,MAAA;AAAA,gBACX,iBAAA,EAAgB,4BAAA;AAAA,gBAChB,SAAA,EAAW,EAAA;AAAA,kBACV,wCAAA;AAAA,kBACA;AAAA,iBACD;AAAA,gBACA,KAAA,EAAO;AAAA,kBACN,KAAA,EAAO,MAAA;AAAA,kBACP,QAAA,EAAU,GAAA;AAAA,kBACV,SAAA,EAAW,YAAA;AAAA,kBACX,OAAA,EAAS,gBAAA;AAAA,kBACT,UAAA,EACC,4DAAA;AAAA,kBACD,MAAA,EACC;AAAA,iBACF;AAAA,gBACA,QAAA,EAAU,EAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAF,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACA,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,YAAA;AAAA,sBACT,QAAA,EAAU,YAAA;AAAA,sBACV,SAAA,EAAU,sJAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,GAAA,EAAK,EAAA;AAAA,wBACL,KAAA,EAAO,EAAA;AAAA,wBACP,KAAA,EAAO,EAAA;AAAA,wBACP,MAAA,EAAQ;AAAA,uBACT;AAAA,sBACA,YAAA,EAAW,OAAA;AAAA,sBAEX,0BAAAA,cAAAA,CAAC+B,aAAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,aAAa,GAAA,EAAK;AAAA;AAAA,mBAChC;AAAA,kCAEA/B,cAAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACA,EAAA,EAAG,4BAAA;AAAA,sBACH,SAAA,EAAU,0BAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,QAAA,EAAU,EAAA;AAAA,wBACV,UAAA,EAAY,GAAA;AAAA,wBACZ,MAAA,EAAQ,UAAA;AAAA,wBACR,YAAA,EAAc,EAAA;AAAA,wBACd,WAAA,EAAa,EAAA;AAAA,wBACb,KAAA,EACC;AAAA,uBACF;AAAA,sBAEC,QAAA,EAAA,iBAAA,CAAkB;AAAA;AAAA,mBACpB;AAAA,kBAEC,6BACAA,cAAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,qCAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,QAAA,EAAU,EAAA;AAAA,wBACV,aAAA,EAAe,QAAA;AAAA,wBACf,MAAA,EAAQ,SAAA;AAAA,wBACR,KAAA,EACC,sEAAA;AAAA,wBACD,OAAA,EAAS;AAAA,uBACV;AAAA,sBACA,QAAA,EAAA;AAAA;AAAA,mBAED;AAAA,kBAGA,SAAA,IAAa,iBAAA,CAAkB,QAAA,EAAU,MAAA,oBACzCA,cAAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,mDAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,QAAA,EAAU,EAAA;AAAA,wBACV,UAAA,EAAY,GAAA;AAAA,wBACZ,MAAA,EAAQ,UAAA;AAAA,wBACR,KAAA,EAAO;AAAA,uBACR;AAAA,sBAEC,QAAA,EAAA,sBAAA,CAAuB,iBAAA,CAAkB,QAAA,CAAS,MAAM;AAAA;AAAA,mBAC1D;AAAA,kBAGA,2BACAA,cAAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,qCAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,QAAA,EAAU,EAAA;AAAA,wBACV,aAAA,EAAe,QAAA;AAAA,wBACf,MAAA,EAAQ,SAAA;AAAA,wBACR,KAAA,EACC,sEAAA;AAAA,wBACD,OAAA,EAAS;AAAA,uBACV;AAAA,sBACA,QAAA,EAAA;AAAA;AAAA,mBAED;AAAA,kBAGA,OAAA,IAAW,iBAAA,CAAkB,QAAA,EAAU,SAAA,oBACvCE,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,aAAA;AAAA,sBACV,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAW;AAAA,sBAE5B,QAAA,EAAA;AAAA,wCAAAF,cAAAA;AAAA,0BAAC,GAAA;AAAA,0BAAA;AAAA,4BACA,SAAA,EAAU,yBAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,MAAA,EAAQ,SAAA;AAAA,8BACR,KAAA,EAAO;AAAA,6BACR;AAAA,4BAEC,4BAAkB,QAAA,CAAS;AAAA;AAAA,yBAC7B;AAAA,wBACC,iBAAA,CAAkB,QAAA,CAAS,SAAA,mBAC3BA,cAAAA;AAAA,0BAAC,GAAA;AAAA,0BAAA;AAAA,4BACA,SAAA,EAAU,yBAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,aAAA,EAAe,QAAA;AAAA,8BACf,MAAA,EAAQ,CAAA;AAAA,8BACR,KAAA,EAAO,sCAAA;AAAA,8BACP,OAAA,EAAS;AAAA,6BACV;AAAA,4BAEC,4BAAkB,QAAA,CAAS;AAAA;AAAA,yBAC7B,GACG;AAAA;AAAA;AAAA,mBACL;AAAA,kCAGDE,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC9B,QAAA,EAAA;AAAA,oCAAAF,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACA,KAAA,EAAO,GAAA;AAAA,wBACP,QAAA,EAAU,MAAA;AAAA,wBACV,WAAW,MAAA,CAAO,SAAA;AAAA,wBAClB,QAAA,EAAU,YAAA;AAAA,wBACV,KAAA,EAAO;AAAA;AAAA,qBACR;AAAA,oBACC,8BACAE,eAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACA,SAAA,EAAU,wCAAA;AAAA,wBACV,KAAA,EAAO;AAAA,0BACN,SAAA,EAAW,EAAA;AAAA,0BACX,QAAA,EAAU,EAAA;AAAA,0BACV,KAAA,EAAO;AAAA,yBACR;AAAA,wBAEA,QAAA,EAAA;AAAA,0CAAAF,cAAAA;AAAA,4BAACc,mBAAAA;AAAA,4BAAA;AAAA,8BACA,SAAA,EAAU,uBAAA;AAAA,8BACV,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AAAG;AAAA,2BAChC;AAAA,0CACAd,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EACd,wBAAc,eAAA,EAChB;AAAA;AAAA;AAAA,qBACD,GACG;AAAA,mBAAA,EACL,CAAA;AAAA,kCAEAE,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,4BAAA;AAAA,sBACV,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAI,cAAc,EAAA,EAAG;AAAA,sBAEnC,QAAA,EAAA;AAAA,wCAAAF,cAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,IAAA,EAAK,QAAA;AAAA,4BACL,OAAA,EAAS,YAAA;AAAA,4BACT,QAAA,EAAU,gBAAgB,uBAAA,GAA0B,CAAA;AAAA,4BACpD,SAAA,EAAU,qJAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,aAAA,EAAe,QAAA;AAAA,8BACf,KAAA,EACC;AAAA,6BACF;AAAA,4BAEC,yBAAe,QAAA,mBACfE,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACf,QAAA,EAAA;AAAA,8CAAAF,cAAAA,CAACc,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,8BACzC,aAAA,CAAc;AAAA,6BAAA,EAChB,CAAA,GACG,0BAA0B,CAAA,GAC7B,CAAA,EAAG,cAAc,mBAAmB,CAAA,CAAA,EAAI,uBAAuB,CAAA,CAAA,CAAA,GAE/D,aAAA,CAAc;AAAA;AAAA,yBAEhB;AAAA,wCAEAd,cAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,IAAA,EAAK,QAAA;AAAA,4BACL,OAAA,EAAS,YAAA;AAAA,4BACT,QAAA,EAAU,YAAA;AAAA,4BACV,SAAA,EAAU,qJAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,aAAA,EAAe,QAAA;AAAA,8BACf,KAAA,EACC;AAAA,6BACF;AAAA,4BAEC,QAAA,EAAA,YAAA,mBACAE,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACf,QAAA,EAAA;AAAA,8CAAAF,cAAAA,CAACc,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,8BACzC,aAAA,CAAc;AAAA,6BAAA,EAChB,CAAA,GACG,OAAA,GACH,aAAA,CAAc,MAAA,GAEd,aAAA,CAAc;AAAA;AAAA;AAEhB;AAAA;AAAA,mBACD;AAAA,kCAEAZ,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,+DAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACN,SAAA,EACC,4EAAA;AAAA,wBACD,UAAA,EAAY;AAAA,uBACb;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAF,cAAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACA,SAAA,EAAU,+BAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,KAAA,EACC,sEAAA;AAAA,8BACD,OAAA,EAAS;AAAA,6BACV;AAAA,4BAEC,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA,yBAChB;AAAA,wCACAA,cAAAA;AAAA,0BAAC,KAAA;AAAA,0BAAA;AAAA,4BACA,GAAA,EAAK,6BAAA;AAAA,4BACL,GAAA,EAAI,EAAA;AAAA,4BACJ,KAAA,EAAO;AAAA,8BACN,MAAA,EAAQ,EAAA;AAAA,8BACR,KAAA,EAAO,MAAA;AAAA,8BACP,UAAA,EAAY,CAAA;AAAA,8BACZ,SAAA,EAAW;AAAA,6BACZ;AAAA,4BACA,SAAA,EAAW;AAAA;AAAA,yBACZ;AAAA,wCACAA,cAAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACA,SAAA,EAAU,6BAAA;AAAA,4BACV,KAAA,EAAO;AAAA,8BACN,QAAA,EAAU,EAAA;AAAA,8BACV,aAAA,EAAe,QAAA;AAAA,8BACf,KAAA,EAAO;AAAA,6BACR;AAAA,4BAEC,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA;AAChB;AAAA;AAAA;AACD;AAAA;AAAA;AACD;AAAA;AACD;AAAA;AAAA,GACD;AAEF;ACleO,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,GAAII,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,uBACCF,eAAAA,CAAAO,mBAAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAP,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,oBAC1BF,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,CAAC+B,eAAA,EAAE,SAAA,EAAW,GAAG,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG,CAAA,mBAEzC/B,cAAAA,CAACoD,yBAAA,EAAA,EAAc,WAAW,EAAA,CAAG,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG;AAAA;AAAA;AAAA,KAEvD;AAAA,IAGC,0BACAlD,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,kCAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACb,QAAA,EAAA,YAAA,EACF,CAAA;AAAA,kCACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACd,QAAA,EAAA;AAAA,oCAAAF,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,CAACqD,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAClC;AAAA;AAAA,WACD;AAAA,0BAGArD,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;;;ACnJO,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.js","sourcesContent":["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","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","/**\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","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 * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { useCallback, useEffect } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nexport type ResetSessionConfirmModalProps = {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n};\n\nexport function ResetSessionConfirmModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n}: ResetSessionConfirmModalProps) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, isOpen]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-reset-session-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-reset-session-modal-overlay\" />\n\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-reset-session-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-reset-session-title\"\n\t\t\t\t\t\taria-describedby=\"payman-reset-session-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-copy\">\n\t\t\t\t\t\t\t<p className=\"payman-reset-session-modal-eyebrow\">\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-title\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-title\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tStart a new session?\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-description\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis will clear the current conversation and start fresh.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\ntype ActionTooltipV2Props = {\n\tlabel: string;\n\tchildren: ReactNode;\n};\n\nexport function ActionTooltipV2({ label, children }: ActionTooltipV2Props) {\n\treturn (\n\t\t<div className=\"payman-v2-tooltip\">\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\" className=\"payman-v2-tooltip-content\">\n\t\t\t\t<div className=\"payman-v2-tooltip-text\">\n\t\t\t\t\t{label}\n\t\t\t\t\t<div className=\"payman-v2-tooltip-arrow\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tCopy,\n\tPencil,\n\tRotateCcw,\n} from \"lucide-react\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport { getConflictErrorMessage } from \"../../utils/errorMessages\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n\tactions?: UserMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nfunction formatMessageTime(timestamp: string): string {\n\tconst value = new Date(timestamp);\n\tif (Number.isNaN(value.getTime())) return \"\";\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(value);\n}\n\nexport function UserMessageV2({\n\tmessage,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n\tactions,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = 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\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(message.content);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst timestamp = formatMessageTime(message.timestamp);\n\tconst hasVisibleActions =\n\t\tshowCopyAction || (showEditAction && !!onEdit) || (showRetryAction && !!onRetry);\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check className=\"h-4 w-4\" style={{ color: \"#059669\" }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-user-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-user-msg-group\">\n\t\t\t\t\t<div className=\"payman-v2-user-msg-bubble\">\n\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">{message.content}</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{message.isError && message.errorDetails && (() => {\n\t\t\t\t\t\tconst resolvedError =\n\t\t\t\t\t\t\tgetConflictErrorMessage(message.errorDetails) ??\n\t\t\t\t\t\t\tmessage.errorDetails;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"payman-v2-user-msg-error\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5 shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: \"rgba(239, 68, 68, 0.7)\", marginTop: \"2px\" }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedError}\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);\n\t\t\t\t\t})()}\n\n\t\t\t\t\t{(timestamp || hasVisibleActions) && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-actions\">\n\t\t\t\t\t\t\t{timestamp ? (\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-timestamp\">{timestamp}</span>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<Copy className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showEditAction && onEdit && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Edit\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onEdit(message.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pencil className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showRetryAction && onRetry && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Retry\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(message.id)}\n\t\t\t\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Retry message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { Loader2, ImageOff, Eye } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nexport type MarkdownImageV2Props = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nconst frameStyle: CSSProperties = {\n\twidth: \"min(100%, 32rem)\",\n\tmaxWidth: \"100%\",\n};\n\nconst imgStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\theight: \"auto\",\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"22rem\",\n\tobjectFit: \"contain\",\n};\n\nexport function MarkdownImageV2({\n\tsrc,\n\talt,\n\tisResolving = false,\n\tonImageClick,\n}: MarkdownImageV2Props) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst sentinelRef = useRef<HTMLSpanElement>(null);\n\n\tconst isUnresolvedRag = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src],\n\t);\n\tconst isResolvingRag = Boolean(isResolving && isUnresolvedRag);\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetRetryCount(0);\n\t\t// Don't reset visibility — if the element is already in the viewport\n\t\t// (e.g. after RAG URL → resolved URL swap), keep loading immediately\n\t\t// instead of flashing the \"Image\" placeholder for a frame.\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst el = sentinelRef.current;\n\t\tif (!el || !src) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"200px\" },\n\t\t);\n\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [src]);\n\n\tif (!src) return null;\n\n\tif (isResolvingRag) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn(\"payman-v2-md-image\", \"payman-v2-md-image-resolving\")}\n\t\t\t>\n\t\t\t\t<span className=\"payman-v2-md-image-resolving-inner\">\n\t\t\t\t\t<Loader2\n\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t/>\n\t\t\t\t\t<span>Loading image</span>\n\t\t\t\t\t<span>Reference image</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn (\n\t\t\t<span className={cn(\"payman-v2-md-image\", \"payman-v2-md-image-error\")}>\n\t\t\t\t<ImageOff aria-hidden />\n\t\t\t\t<span>Unable to load image</span>\n\t\t\t\t{alt ? <span>{alt}</span> : null}\n\t\t\t\t{retryCount < 3 ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-error-retry\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetRetryCount((c) => c + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t);\n\t}\n\n\tconst imgSrc =\n\t\tretryCount > 0\n\t\t\t? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_r=${retryCount}`\n\t\t\t: src;\n\n\treturn (\n\t\t<span ref={sentinelRef} className=\"payman-v2-md-image\">\n\t\t\t{isVisible ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"payman-v2-md-image-button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded && src) onImageClick?.(src, alt || \"Image\");\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...frameStyle,\n\t\t\t\t\t\tminHeight: isLoaded ? 0 : \"10rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{!isLoaded && (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-loading\">\n\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Loading image…</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={imgSrc}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-img\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...imgStyle,\n\t\t\t\t\t\t\topacity: isLoaded ? 1 : 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{isLoaded ? (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay\" aria-hidden>\n\t\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay-icon\">\n\t\t\t\t\t\t\t\t<Eye />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"payman-v2-md-image-placeholder\"\n\t\t\t\t\tstyle={{ ...frameStyle, minHeight: \"10rem\" }}\n\t\t\t\t>\n\t\t\t\t\t<span>Image</span>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { Components } from \"react-markdown\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownImageV2 } from \"./MarkdownImageV2\";\n\nexport type MarkdownRendererV2Props = {\n\tcontent: string;\n\tisStreaming?: boolean;\n\tisResolvingImages?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nfunction buildComponents(\n\tonImageClick?: (src: string, alt: string) => void,\n\tisResolvingImages?: boolean,\n): Components {\n\treturn {\n\t\tp: ({ children }) => <p>{children}</p>,\n\t\tcode: ({ children }) => <code>{children}</code>,\n\t\tpre: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-pre\">\n\t\t\t\t<pre>{children}</pre>\n\t\t\t</div>\n\t\t),\n\t\tul: ({ children }) => <ul>{children}</ul>,\n\t\tol: ({ children }) => <ol>{children}</ol>,\n\t\tli: ({ children }) => <li>{children}</li>,\n\t\th1: ({ children }) => <h1>{children}</h1>,\n\t\th2: ({ children }) => <h2>{children}</h2>,\n\t\th3: ({ children }) => <h3>{children}</h3>,\n\t\tstrong: ({ children }) => <strong>{children}</strong>,\n\t\tem: ({ children }) => <em>{children}</em>,\n\t\tblockquote: ({ children }) => <blockquote>{children}</blockquote>,\n\t\thr: () => <hr />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImageV2\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={isResolvingImages}\n\t\t\t\tonImageClick={onImageClick}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-table-wrapper\">\n\t\t\t\t<table className=\"payman-v2-markdown-table\">{children}</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-v2-markdown-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"payman-v2-markdown-tbody\">{children}</tbody>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"payman-v2-markdown-th\">{children}</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"payman-v2-markdown-td\">{children}</td>\n\t\t),\n\t};\n}\n\nexport function MarkdownRendererV2({\n\tcontent,\n\tisStreaming,\n\tisResolvingImages,\n\tonImageClick,\n}: MarkdownRendererV2Props) {\n\tconst components = useMemo(\n\t\t() => buildComponents(onImageClick, isResolvingImages),\n\t\t[onImageClick, isResolvingImages],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-v2-markdown\",\n\t\t\t\tisStreaming && \"payman-v2-streaming-cursor\",\n\t\t\t)}\n\t\t>\n\t\t\t<ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\nimport { interpolate } from \"flubber\";\n\n// Exact Payman brand logo path (viewBox 0 0 190 232).\nconst PAYMAN_PATH =\n\t\"M174.005 38.1616C159.62 18.4068 138.406 5.43014 114.263 1.62485C90.1187 -2.18045 65.9302 3.63155 46.1599 17.9906C21.9565 35.5752 6.06885 61.5137 1.39776 91.0344C-3.27333 120.555 3.85231 150.135 21.4358 174.305C43.0508 204.004 74.9451 223.506 111.243 229.244L122.415 231.013V171.273C121.968 171.273 121.522 171.302 121.076 171.302C116.955 171.302 112.82 170.975 108.684 170.321C106.795 170.024 104.92 169.638 103.076 169.207V207.839C76.5368 201.031 53.4045 185.364 37.0706 162.934C22.5218 142.941 16.6309 118.474 20.4838 94.037C24.3515 69.6148 37.502 48.1505 57.5103 33.5983C73.1004 22.2715 92.1865 17.6784 111.228 20.6811C130.269 23.6837 147.005 33.9253 158.355 49.5032C167.117 61.5583 170.673 76.2889 168.337 91.0047C166.016 105.72 158.087 118.653 146.038 127.408C136.815 134.112 125.524 136.832 114.248 135.048C102.972 133.264 93.079 127.214 86.355 117.984C81.2823 111.027 79.2443 102.51 80.5831 94.0073C81.922 85.5049 86.5038 78.0429 93.4658 72.9741C98.6129 69.2283 104.92 67.7121 111.213 68.7081C117.506 69.704 123.039 73.0782 126.788 78.2362C129.481 81.9374 130.567 86.4711 129.853 90.9898C129.139 95.5086 126.699 99.4774 122.995 102.183H146.648C147.719 99.5815 148.492 96.8464 148.939 94.0073C150.456 84.39 148.135 74.743 142.408 66.8797C135.625 57.5597 125.613 51.4207 114.218 49.637C102.823 47.8384 91.4129 50.5734 82.0707 57.3665C70.9285 65.4676 63.6095 77.4037 61.4525 91.0047C59.2955 104.606 62.5831 118.221 70.6905 129.355C80.4344 142.748 94.8195 151.548 111.198 154.134C127.577 156.72 143.97 152.781 157.373 143.03C173.603 131.228 184.269 113.822 187.408 94.0073C190.547 74.193 185.757 54.349 173.96 38.117L174.005 38.1616Z\";\n\n// Circle centred on the Payman logo's viewBox midpoint (95, 116) with radius 80,\n// expressed as four cubic-bezier segments so flubber interpolates smoothly.\nconst CIRCLE_PATH =\n\t\"M95 36C139.183 36 175 71.817 175 116C175 160.183 139.183 196 95 196C50.817 196 15 160.183 15 116C15 71.817 50.817 36 95 36Z\";\n\n// Eased cubic-in-out for the morph so edges ease at rest and middle is quick.\nfunction easeInOut(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\n\ntype Phase =\n\t| { kind: \"hold-logo\" }\n\t| { kind: \"morph\"; direction: 1 | -1; progress: number }\n\t| { kind: \"hold-circle\"; progress: number };\n\nconst TIMINGS = {\n\t// Total loop cycle = sum of all phases (ms)\n\tholdLogoMs: 900,\n\tmorphToCircleMs: 550,\n\tholdCircleMs: 1100,\n\tmorphToLogoMs: 550,\n};\n\nconst TOTAL_CYCLE =\n\tTIMINGS.holdLogoMs +\n\tTIMINGS.morphToCircleMs +\n\tTIMINGS.holdCircleMs +\n\tTIMINGS.morphToLogoMs;\n\nfunction phaseAtTime(elapsed: number): Phase {\n\tlet t = elapsed % TOTAL_CYCLE;\n\n\tif (t < TIMINGS.holdLogoMs) {\n\t\treturn { kind: \"hold-logo\" };\n\t}\n\tt -= TIMINGS.holdLogoMs;\n\n\tif (t < TIMINGS.morphToCircleMs) {\n\t\treturn {\n\t\t\tkind: \"morph\",\n\t\t\tdirection: 1,\n\t\t\tprogress: easeInOut(t / TIMINGS.morphToCircleMs),\n\t\t};\n\t}\n\tt -= TIMINGS.morphToCircleMs;\n\n\tif (t < TIMINGS.holdCircleMs) {\n\t\treturn { kind: \"hold-circle\", progress: t / TIMINGS.holdCircleMs };\n\t}\n\tt -= TIMINGS.holdCircleMs;\n\n\treturn {\n\t\tkind: \"morph\",\n\t\tdirection: -1,\n\t\tprogress: easeInOut(t / TIMINGS.morphToLogoMs),\n\t};\n}\n\n// Ring stroke geometry (circumference of a circle at r=65 ≈ 408.4).\nconst RING_CX = 95;\nconst RING_CY = 116;\nconst RING_R = 65;\nconst RING_STROKE_WIDTH = 22;\nconst RING_CIRCUMFERENCE = 2 * Math.PI * RING_R;\nconst RING_ARC_FRACTION = 0.3; // 30% of the ring is the visible progressing arc.\n\n// Flubber's `interpolate` is expensive at fine `maxSegmentLength`. Cache the\n// resulting interpolators at module scope (shared across every mount) and\n// build them lazily off the render-critical path so the first assistant\n// message doesn't block the main thread while \"Working on it…\" animates in.\ntype Interpolators = {\n\tforward: (t: number) => string;\n\tbackward: (t: number) => string;\n};\nlet cachedInterpolators: Interpolators | null = null;\nlet pendingInterpolators: Promise<Interpolators> | null = null;\n\nfunction buildInterpolators(): Interpolators {\n\tconst opts = { maxSegmentLength: 8 };\n\treturn {\n\t\tforward: interpolate(PAYMAN_PATH, CIRCLE_PATH, opts),\n\t\tbackward: interpolate(CIRCLE_PATH, PAYMAN_PATH, opts),\n\t};\n}\n\nfunction loadInterpolatorsAsync(): Promise<Interpolators> {\n\tif (cachedInterpolators) return Promise.resolve(cachedInterpolators);\n\tif (pendingInterpolators) return pendingInterpolators;\n\n\tpendingInterpolators = new Promise<Interpolators>((resolve) => {\n\t\tconst run = () => {\n\t\t\tcachedInterpolators = buildInterpolators();\n\t\t\tresolve(cachedInterpolators);\n\t\t};\n\t\tconst ric = (\n\t\t\tglobalThis as typeof globalThis & {\n\t\t\t\trequestIdleCallback?: (cb: () => void, opts?: { timeout: number }) => number;\n\t\t\t}\n\t\t).requestIdleCallback;\n\t\tif (typeof ric === \"function\") {\n\t\t\tric(run, { timeout: 200 });\n\t\t} else {\n\t\t\tsetTimeout(run, 0);\n\t\t}\n\t});\n\treturn pendingInterpolators;\n}\n\nexport function PaymanMark() {\n\tconst pathRef = useRef<SVGPathElement | null>(null);\n\tconst ringGroupRef = useRef<SVGGElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst reduced = window.matchMedia(\n\t\t\t\"(prefers-reduced-motion: reduce)\",\n\t\t).matches;\n\t\tif (reduced) {\n\t\t\tpathRef.current?.setAttribute(\"d\", PAYMAN_PATH);\n\t\t\tpathRef.current?.setAttribute(\"fill-opacity\", \"1\");\n\t\t\tringGroupRef.current?.setAttribute(\"opacity\", \"0\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet raf = 0;\n\t\tlet cancelled = false;\n\t\tconst start = performance.now();\n\t\tlet interpolators = cachedInterpolators;\n\n\t\tconst tick = (now: number) => {\n\t\t\tconst elapsed = now - start;\n\t\t\tconst phase = phaseAtTime(elapsed);\n\n\t\t\tlet d: string;\n\t\t\tlet fillOpacity = 1;\n\t\t\tlet ringOpacity = 0;\n\t\t\t// The ring's continuous spin is based on absolute elapsed time so it\n\t\t\t// stays smooth whether visible or not.\n\t\t\tconst spin = (elapsed / 900) * 360;\n\n\t\t\tswitch (phase.kind) {\n\t\t\t\tcase \"hold-logo\":\n\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"morph\": {\n\t\t\t\t\tif (!interpolators) {\n\t\t\t\t\t\t// Interpolators aren't ready yet — hold the logo instead of\n\t\t\t\t\t\t// blocking the frame to compute them.\n\t\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\td =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? interpolators.forward(phase.progress)\n\t\t\t\t\t\t\t: interpolators.backward(phase.progress);\n\t\t\t\t\t// `p` measures how \"circle-like\" the current shape is (0 = P, 1 = circle).\n\t\t\t\t\tconst p =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? phase.progress\n\t\t\t\t\t\t\t: 1 - phase.progress;\n\t\t\t\t\t// Fill holds until the shape is mostly a circle, then fades out.\n\t\t\t\t\tfillOpacity = p < 0.6 ? 1 : 1 - (p - 0.6) / 0.4;\n\t\t\t\t\t// Ring fades in once the shape is past halfway to circle.\n\t\t\t\t\tringOpacity = p < 0.55 ? 0 : (p - 0.55) / 0.45;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"hold-circle\":\n\t\t\t\t\td = CIRCLE_PATH;\n\t\t\t\t\tfillOpacity = 0;\n\t\t\t\t\tringOpacity = 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (pathRef.current) {\n\t\t\t\tpathRef.current.setAttribute(\"d\", d);\n\t\t\t\tpathRef.current.setAttribute(\"fill-opacity\", fillOpacity.toFixed(3));\n\t\t\t}\n\t\t\tif (ringGroupRef.current) {\n\t\t\t\tringGroupRef.current.setAttribute(\"opacity\", ringOpacity.toFixed(3));\n\t\t\t\tringGroupRef.current.setAttribute(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`rotate(${spin.toFixed(2)} ${RING_CX} ${RING_CY})`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\traf = requestAnimationFrame(tick);\n\t\t};\n\n\t\traf = requestAnimationFrame(tick);\n\n\t\tif (!interpolators) {\n\t\t\tvoid loadInterpolatorsAsync().then((result) => {\n\t\t\t\tif (!cancelled) interpolators = result;\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tcancelAnimationFrame(raf);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tclassName=\"payman-v2-thinking-mark\"\n\t\t\tviewBox=\"0 0 190 232\"\n\t\t\taria-hidden\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t{/* Morphing filled shape: Payman P ↔ circle. */}\n\t\t\t<path ref={pathRef} d={PAYMAN_PATH} fill=\"currentColor\" />\n\n\t\t\t{/* Progressing ring that appears once the shape reaches circle. */}\n\t\t\t<g ref={ringGroupRef} opacity={0}>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeOpacity={0.16}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${RING_CIRCUMFERENCE * RING_ARC_FRACTION} ${RING_CIRCUMFERENCE}`}\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { PaymanMark } from \"./PaymanMark\";\n\nexport const CURSOR_MESSAGES = [\n\t\"Analyzing\",\n\t\"Processing\",\n\t\"Calculating\",\n\t\"Reviewing\",\n\t\"Verifying\",\n\t\"Assessing\",\n\t\"Evaluating\",\n\t\"Checking\",\n\t\"Planning\",\n\t\"Working\",\n\t\"Updating\",\n\t\"Validating\",\n\t\"Monitoring\",\n\t\"Optimizing\",\n\t\"Reconciling\",\n\t\"Forecasting\",\n\t\"Inspecting\",\n\t\"Organizing\",\n\t\"Sorting\",\n\t\"Scanning\",\n\t\"Balancing\",\n\t\"Summarizing\",\n\t\"Predicting\",\n\t\"Comparing\",\n\t\"Tracking\",\n\t\"Adjusting\",\n\t\"Examining\",\n\t\"Mapping\",\n\t\"Modeling\",\n\t\"Reporting\",\n\t\"Confirming\",\n] as const;\n\nexport const FINAL_CURSOR_MESSAGE = \"Finishing up\";\n\nfunction getMaxDuration(\n\t...values: Array<number | null | undefined>\n): number | undefined {\n\tconst defined = values.filter(\n\t\t(value): value is number =>\n\t\t\ttypeof value === \"number\" && Number.isFinite(value),\n\t);\n\treturn defined.length > 0 ? Math.max(...defined) : undefined;\n}\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 parseThinkingContent(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\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({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✗ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({ type: \"detail\", text: line });\n\t}\n\treturn out;\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\ntype AnimatedSecondsProps = {\n\tvalue: number;\n\tclassName?: string;\n\tariaLabel: string;\n};\n\nfunction AnimatedSeconds({\n\tvalue,\n\tclassName,\n\tariaLabel,\n}: AnimatedSecondsProps) {\n\treturn (\n\t\t<span className={cn(\"payman-v2-thinking-seconds\", className)} aria-label={ariaLabel}>\n\t\t\t<span className=\"payman-v2-thinking-seconds-track\" aria-hidden=\"true\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tclassName=\"payman-v2-thinking-seconds-value\"\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n\t\t\t\t\t\texit={{ opacity: 0, y: -6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.22, 1, 0.36, 1] }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{formatDuration(value)}\n\t\t\t\t\t</motion.span>\n\t\t\t\t</AnimatePresence>\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nexport type ThinkingBlockV2Props = {\n\tcontent: string;\n\tisStreaming: boolean;\n\t/** Final duration in seconds (shown after streaming ends). */\n\tdurationSec?: number;\n\t/** Epoch ms when the request was submitted — used for the live counter. */\n\tstartedAt?: number;\n};\n\nexport function ThinkingBlockV2({\n\tcontent,\n\tisStreaming,\n\tdurationSec,\n\tstartedAt,\n}: ThinkingBlockV2Props) {\n\tconst [open, setOpen] = useState(true);\n\tconst [cursorIdx, setCursorIdx] = useState(0);\n\tconst [elapsedSec, setElapsedSec] = useState(() =>\n\t\t// Only seed from startedAt when actively streaming — otherwise (e.g.\n\t\t// after a hot-reload on a completed message) Date.now()-startedAt would\n\t\t// be the time since completion, not the actual thinking duration.\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\t// Mirror of elapsedSec as a ref so the freeze effect can read the latest\n\t// value without needing it in its dependency array.\n\tconst elapsedSecRef = useRef(elapsedSec);\n\tconst frozenSecRef = useRef<number | null>(null);\n\tconst prevStreaming = useRef(isStreaming);\n\n\tconst parsed = useMemo(() => parseThinkingContent(content), [content]);\n\n\tconst isFinalizingPhase = useMemo(() => {\n\t\tconst statements = parsed.filter(\n\t\t\t(l): l is Extract<ThinkingLine, { type: \"statement\" }> =>\n\t\t\t\tl.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\tsetOpen(false);\n\t\t\t// Capture the actual last timer value via the ref — NOT recomputed\n\t\t\t// from startedAt, which may have changed to the completion timestamp\n\t\t\t// by the time this effect fires.\n\t\t\tfrozenSecRef.current = elapsedSecRef.current;\n\t\t}\n\t\tprevStreaming.current = isStreaming;\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || !startedAt) return;\n\t\t// `active` flag ensures any interval tick that fires after cleanup\n\t\t// (React doesn't guarantee synchronous teardown) is a no-op.\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 = window.setInterval(tick, 1000);\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || isFinalizingPhase) return;\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetCursorIdx((i) => (i + 1) % CURSOR_MESSAGES.length);\n\t\t}, 4000);\n\t\treturn () => window.clearInterval(id);\n\t}, [isStreaming, isFinalizingPhase]);\n\n\t// For historical messages (never streamed in this session), use the persisted\n\t// durationSec. For live completions, prefer the frozen session timer value.\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 = getMaxDuration(\n\t\tfrozenSecRef.current,\n\t\tjustStoppedSec,\n\t\t// Only fall back to durationSec when the timer never ran this session\n\t\t// (i.e. the message was already complete when this component mounted).\n\t\tfrozenSecRef.current == null && !prevStreaming.current ? durationSec : undefined,\n\t);\n\n\tconst headerLabel = isStreaming ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t<span className=\"payman-v2-thinking-shimmer\">Working on it…</span>\n\t\t\t{startedAt !== undefined && (\n\t\t\t\t<AnimatedSeconds\n\t\t\t\t\tclassName=\"payman-v2-thinking-timer\"\n\t\t\t\t\tariaLabel={`Elapsed ${formatDuration(elapsedSec)}`}\n\t\t\t\t\tvalue={elapsedSec}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t) : finalSec != null && finalSec > 0 ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t\t<span>Thought for</span>\n\t\t\t\t<AnimatedSeconds\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-timer\",\n\t\t\t\t\t\t\"payman-v2-thinking-duration\",\n\t\t\t\t\t)}\n\t\t\t\t\tariaLabel={`Thought for ${formatDuration(finalSec)}`}\n\t\t\t\t\tvalue={finalSec}\n\t\t\t\t/>\n\t\t\t</span>\n\t) : (\n\t\t<span>Thought</span>\n\t);\n\n\tconst cursorKey = isFinalizingPhase ? \"finalizing\" : String(cursorIdx);\n\tconst cursorText = isFinalizingPhase\n\t\t? FINAL_CURSOR_MESSAGE\n\t\t: CURSOR_MESSAGES[cursorIdx];\n\n\treturn (\n\t\t<div className=\"payman-v2-thinking\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-thinking-toggle\"\n\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\taria-expanded={open}\n\t\t\t>\n\t\t\t\t<ChevronRight\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-chevron\",\n\t\t\t\t\t\topen && \"payman-v2-thinking-chevron-open\",\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t/>\n\t\t\t\t{headerLabel}\n\t\t\t</button>\n\n\t\t\t<div className=\"payman-v2-thinking-border\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{open && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"thinking-content\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-content\"\n\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{parsed.map((item, i) => {\n\t\t\t\t\t\t\t\t\tif (item.type === \"statement\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-statement\"\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{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\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\tif (item.type === \"detail\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-detail\"\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{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\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\treturn (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-thinking-status\",\n\t\t\t\t\t\t\t\t\t\t\t\titem.variant === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-thinking-status-success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-thinking-status-error\",\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{item.text}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isStreaming && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor\"\n\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<PaymanMark />\n\t\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\tkey={cursorKey}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-label payman-v2-thinking-shimmer\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 2 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -2 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.24, ease: [0.4, 0, 0.2, 1] }}\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{cursorText}\n\t\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</div>\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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tCopy,\n\tCheck,\n\tAlertCircle,\n\tWifiOff,\n\tSearchCode,\n} from \"lucide-react\";\nimport { buildFormattedThinking } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { MarkdownRendererV2 } from \"./MarkdownRendererV2\";\nimport { ThinkingBlockV2 } from \"./ThinkingBlockV2\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { useTypingEffect, THINKING_SPEED, RESPONSE_SPEED } from \"./useTypingEffect\";\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonImageClick?: (src: string, alt: string) => void;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\tactions?: AssistantMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nconst INITIAL_THINKING_PLACEHOLDER = [\n\t\"**Getting things ready**\",\n\t\"Putting things together\",\n].join(\"\\n\");\n\n/**\n * Get the formatted thinking text for v2 display.\n * Uses the pre-computed formattedThinkingText from the TS SDK when available,\n * falls back to building it from steps + allThinkingText.\n */\nfunction getFormattedThinking(\n\tmessage: MessageDisplay,\n\tincludeInitialPlaceholder = false,\n): string {\n\tconst plainThinkingText =\n\t\tmessage.allThinkingText || message.activeThinkingText || \"\";\n\n\tconst baseText = message.formattedThinkingText ||\n\t\tbuildFormattedThinking(message.steps, plainThinkingText);\n\n\tif (includeInitialPlaceholder && baseText) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER + \"\\n\" + baseText;\n\t}\n\tif (includeInitialPlaceholder) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER;\n\t}\n\n\treturn baseText;\n}\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonImageClick,\n\tonExecutionTraceClick,\n\tactions,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showTraceAction =\n\t\t(actions?.trace ?? true) && !!onExecutionTraceClick;\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\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw = message.isStreaming && !isHistorical\n\t\t\t? (message.streamingContent || message.content)\n\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\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 = !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 resolvedErrorText = (() => {\n\t\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\t\tif (conflictErrorMessage) {\n\t\t\treturn conflictErrorMessage;\n\t\t}\n\t\tif (\n\t\t\tisFriendlyWorkflowError(message.errorDetails) &&\n\t\t\t!message.errorDetails\n\t\t) {\n\t\t\treturn \"Oops, something went wrong. Please try again.\";\n\t\t}\n\t\treturn message.errorDetails;\n\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\t// Total wall-clock time from when the user submitted (assistant message\n\t// was created) until the last step arrived. Falls back to step-span if\n\t// the message timestamp isn't available.\n\tconst thinkingDuration = (() => {\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(\n\t\t\t\t0,\n\t\t\t\tMath.round((last.timestamp - requestStartedAt) / 1000),\n\t\t\t);\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})();\n\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isConflictError = Boolean(conflictErrorMessage);\n\n\t// For 409 conflicts, render only the parsed backend message — never the\n\t// raw `ops`/JSON payload, a generic \"Oops…\" fallback, or any partial\n\t// streamed content that arrived before the conflict fired.\n\tif (isConflictError) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t{conflictErrorMessage}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (message.isError && !displayContent && !hasThinkingContent) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (showLegacyThinkingPhase) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<p className=\"payman-v2-assistant-msg-thinking-only payman-v2-thinking-shimmer\">\n\t\t\t\t\tWorking on it…\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(displayContent);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst handleTrace = () => {\n\t\tonExecutionTraceClick?.({\n\t\t\tmessage,\n\t\t\ttracingData: message.tracingData,\n\t\t\texecutionId: message.executionId,\n\t\t});\n\t};\n\n\tconst hasPartialError = message.isError && displayContent && !isConflictError;\n\tconst isDone =\n\t\t!message.isStreaming &&\n\t\tdisplayContent &&\n\t\t!hasPartialError &&\n\t\t!isResponseTyping;\n\tconst hasVisibleDoneActions =\n\t\tshowCopyAction ||\n\t\tshowTraceAction;\n\tconst isCancelled = message.isCancelled;\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t{showThinkingBlock && (\n\t\t\t\t\t<ThinkingBlockV2\n\t\t\t\t\t\tcontent={thinkingContent}\n\t\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\t\tdurationSec={message.thinkingDurationSec ?? thinkingDuration}\n\t\t\t\t\t\tstartedAt={requestStartedAt}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"payman-v2-assistant-msg-content-area\">\n\t\t\t\t\t{displayContent ? (\n\t\t\t\t\t\t<MarkdownRendererV2\n\t\t\t\t\t\t\tcontent={displayContent}\n\t\t\t\t\t\t\tisStreaming={(message.isStreaming && !isCancelled) || isResponseTyping}\n\t\t\t\t\t\t\tisResolvingImages={message.isResolvingImages}\n\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : !isThinkingStreaming && !hasThinkingContent ? (\n\t\t\t\t\t\t<span className=\"payman-v2-assistant-msg-placeholder\">...</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t{isCancelled && message.isStreaming && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-paused\">\n\t\t\t\t\t\t<WifiOff\n\t\t\t\t\t\t\tstyle={{ width: 14, height: 14, color: \"rgba(217, 119, 6, 0.7)\", flexShrink: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-paused-text\">\n\t\t\t\t\t\t\tConnection slow - resuming…\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasPartialError && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-partial-error\">\n\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{isDone && hasVisibleDoneActions && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-actions\">\n\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tcopied && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Copy\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t<Check style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Copy style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTraceAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Trace\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleTrace}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-action-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"Trace response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SearchCode style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type OtpInputV2Props = {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tmaxLength?: number;\n\tdisabled?: boolean;\n\terror?: boolean;\n};\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInputV2({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputV2Props) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && (maxLength as number) > 0\n\t\t\t? Math.min(maxLength as number, 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\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [disabled]);\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, char: string) => {\n\t\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\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\treturn;\n\t\t}\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div className={cn(\"payman-v2-otp\", error && \"payman-v2-shake\")}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-otp-digit\",\n\t\t\t\t\t\tdigit && \"payman-v2-otp-digit-filled\",\n\t\t\t\t\t\terror && \"payman-v2-otp-digit-error\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ShieldCheck } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { OtpInputV2 } from \"./OtpInputV2\";\n\nexport type VerificationActionV2 = {\n\ttype: string;\n\tmessage: string;\n\tamount?: string;\n\tpayeeName?: string;\n};\n\nexport type VerificationStatusV2 =\n\t| \"pending\"\n\t| \"verifying\"\n\t| \"approved\"\n\t| \"rejected\"\n\t| \"error\";\n\nexport type VerificationCardV2Props = {\n\tmessageId: string;\n\taction: VerificationActionV2;\n\tstatus: VerificationStatusV2;\n\tclearOtpTrigger?: number;\n\tonApprove: (messageId: string, otp: string) => Promise<void>;\n\tonReject: (messageId: string) => Promise<void>;\n\tonResend: (messageId: string) => Promise<void>;\n};\n\nconst RESEND_COOLDOWN_S = 30;\nconst OTP_LEN = 6;\n\nexport function VerificationCardV2({\n\tmessageId,\n\taction,\n\tstatus,\n\tclearOtpTrigger = 0,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: VerificationCardV2Props) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpErrored, setOtpErrored] = useState(false);\n\tconst [resendSec, setResendSec] = useState(0);\n\tconst [localPending, setLocalPending] = useState(false);\n\tconst lastSubmittedRef = useRef<string | null>(null);\n\tconst resendTimerRef = useRef<number | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger <= 0) return;\n\t\tsetOtpErrored(true);\n\t\tconst t = window.setTimeout(() => {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpErrored(false);\n\t\t\tsetLocalPending(false);\n\t\t\tlastSubmittedRef.current = null;\n\t\t}, 600);\n\t\treturn () => window.clearTimeout(t);\n\t}, [clearOtpTrigger]);\n\n\tuseEffect(() => {\n\t\tif (otp.length < OTP_LEN) {\n\t\t\tlastSubmittedRef.current = null;\n\t\t}\n\t}, [otp]);\n\n\tuseEffect(() => {\n\t\tif (status !== \"pending\") {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [status]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tsetLocalPending(true);\n\t\tvoid onApprove(messageId, otp).catch(() => {\n\t\t\tlastSubmittedRef.current = null;\n\t\t\tsetLocalPending(false);\n\t\t});\n\t}, [messageId, onApprove, otp, status]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst startResendCooldown = useCallback(() => {\n\t\tsetResendSec(RESEND_COOLDOWN_S);\n\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t}\n\t\tresendTimerRef.current = window.setInterval(() => {\n\t\t\tsetResendSec((s) => {\n\t\t\t\tif (s <= 1) {\n\t\t\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t\t\t\tresendTimerRef.current = undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn s - 1;\n\t\t\t});\n\t\t}, 1000);\n\t}, []);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendSec > 0 || status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onResend(messageId);\n\t\t\tstartResendCooldown();\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onResend, resendSec, startResendCooldown, status]);\n\n\tconst handleCancel = useCallback(async () => {\n\t\tif (status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onReject(messageId);\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onReject, status]);\n\n\tconst busy = status === \"verifying\" || localPending;\n\n\tif (status === \"approved\" || status === \"rejected\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"payman-v2-verification\"\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 320, damping: 28 }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"payman-v2-verification-card\",\n\t\t\t\t\tbusy && \"payman-v2-verification-card-busy\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"payman-v2-verification-header\">\n\t\t\t\t\t<div className=\"payman-v2-verification-header-row\">\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"payman-v2-verification-icon\"\n\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\tstrokeWidth={1.75}\n\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-verification-title\">Verify</p>\n\t\t\t\t\t\t{action.amount != null ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-amount\">\n\t\t\t\t\t\t\t\t{action.amount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : action.payeeName ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-payee\">\n\t\t\t\t\t\t\t\t{action.payeeName}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"payman-v2-verification-description\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your phone\n\t\t\t\t\t</p>\n\t\t\t\t\t<OtpInputV2\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={OTP_LEN}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\terror={otpErrored}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"payman-v2-verification-actions\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-cancel-btn\"\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tonClick={() => void handleCancel()}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-verification-resend-link\"\n\t\t\t\tdisabled={busy || resendSec > 0}\n\t\t\t\tonClick={() => void handleResend()}\n\t\t\t>\n\t\t\t\t{resendSec > 0 ? `Resend (${resendSec}s)` : \"Resend\"}\n\t\t\t</button>\n\t\t</motion.div>\n\t);\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\nimport { VerificationCardV2 } from \"./VerificationCardV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nconst SCROLL_THRESHOLD = 100;\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n};\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisStreaming: _isStreaming = false,\n\t\t\tisLoadingSession = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\tuserAction,\n\t\t\tonApproveAction,\n\t\t\tonRejectAction,\n\t\t\tonResendAction,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollRef = useRef<HTMLDivElement>(null);\n\t\tconst scrollInnerRef = useRef<HTMLDivElement>(null);\n\t\tconst isNearBottomRef = useRef(true);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst pauseStickUntilUserMessageRef = useRef(false);\n\t\tconst followingBottomRef = useRef(true);\n\t\tconst isProgrammaticScrollRef = useRef(false);\n\n\t\tconst getDistanceFromBottom = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return 0;\n\t\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t}, []);\n\n\t\tconst scrollToBottom = useCallback(\n\t\t\t(behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t\t\t\tconst clear = () => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t};\n\t\t\t\tif (behavior === \"instant\") {\n\t\t\t\t\trequestAnimationFrame(clear);\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(clear, 400);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\t\tisNearBottomRef.current = true;\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\tsetShowScrollBtn(false);\n\t\t\t\t\tscrollToBottom(behavior);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\tconst handleScroll = useCallback(() => {\n\t\t\tconst distance = getDistanceFromBottom();\n\t\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\t\tisNearBottomRef.current = nearBottom;\n\t\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t\tif (isProgrammaticScrollRef.current) return;\n\n\t\t\tif (!nearBottom) {\n\t\t\t\tfollowingBottomRef.current = false;\n\t\t\t\tpauseStickUntilUserMessageRef.current = true;\n\t\t\t}\n\t\t}, [getDistanceFromBottom]);\n\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\tif (last?.role === \"user\") {\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t\t\t} else if (\n\t\t\t\t\t!pauseStickUntilUserMessageRef.current &&\n\t\t\t\t\tfollowingBottomRef.current\n\t\t\t\t) {\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(\"instant\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\tif (!lastMsg?.isStreaming) return;\n\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\tif (!followingBottomRef.current) return;\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t});\n\t\t});\n\n\t\tuseEffect(() => {\n\t\t\tconst inner = scrollInnerRef.current;\n\t\t\tif (!inner) return;\n\n\t\t\tconst pinIfFollowing = () => {\n\t\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\t\tif (!followingBottomRef.current) return;\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst ro = new ResizeObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tro.observe(inner);\n\t\t\treturn () => ro.disconnect();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-message-list\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tclassName=\"payman-v2-message-scroll payman-v2-scrollbar\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={scrollInnerRef}\n\t\t\t\t\t\tclassName=\"payman-v2-message-scroll-inner\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoadingSession && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-message-list-loading\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\taria-label=\"Loading conversation\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-message-list-spinner\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!isLoadingSession && messages.map((message) => (\n\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t{message.role === \"user\" ? (\n\t\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\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<AssistantMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\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</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{userAction && userAction.status !== \"approved\" && userAction.status !== \"rejected\" && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<VerificationCardV2\n\t\t\t\t\t\t\t\t\tmessageId={userAction.messageId}\n\t\t\t\t\t\t\t\t\taction={userAction.action}\n\t\t\t\t\t\t\t\t\tstatus={userAction.status}\n\t\t\t\t\t\t\t\t\tclearOtpTrigger={userAction.clearOtpTrigger}\n\t\t\t\t\t\t\t\t\tonApprove={onApproveAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonReject={onRejectAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonResend={onResendAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowDown style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tArrowUp,\n\tMic,\n\tPlus,\n\tImagePlus,\n\tPaperclip,\n\tPencil,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\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\tonCancelRecording?: () => void;\n\tonConfirmRecording?: () => void;\n\ttranscribedText?: string;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\teditingMessageId?: string | null;\n\tonClearEditing?: () => void;\n\t/** When true, the send control is hidden (e.g. during inline OTP verification). */\n\thideSendButton?: boolean;\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (message: string) => void;\n};\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tonCancel,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Reply...\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\ttranscribedText = \"\",\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\tshowAttachmentButton = true,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\teditingMessageId = null,\n\t\t\tonClearEditing,\n\t\t\thideSendButton = false,\n\t\t}: ChatInputV2Props,\n\t\tref,\n\t) {\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [showActions, setShowActions] = useState(false);\n\t\tconst [showVoiceTooltip, setShowVoiceTooltip] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst actionsRef = useRef<HTMLDivElement>(null);\n\t\tconst preRecordTextRef = useRef(\"\");\n\t\tconst voiceTooltipTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst voiceDraftSyncActiveRef = useRef(false);\n\n\t\tconst isInputLocked = disabled || isRecording;\n\t\tconst hasAttachmentOptions = showUploadImageButton || showAttachFileButton;\n\t\tconst showAttachmentMenuButton = showAttachmentButton && hasAttachmentOptions;\n\t\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\n\t\tuseEffect(() => {\n\t\t\tif (textareaRef.current) {\n\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, 200)}px`;\n\t\t\t}\n\t\t}, [value]);\n\n\t\tuseEffect(() => {\n\t\t\tif (disabled) {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tsetShowActions(false);\n\t\t\t\ttextareaRef.current?.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst frameId = requestAnimationFrame(() => textareaRef.current?.focus());\n\t\t\treturn () => cancelAnimationFrame(frameId);\n\t\t}, [disabled]);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (message: string) => {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t\tsetValue(message);\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\t\tif (!textarea || disabled) return;\n\t\t\t\t\t\ttextarea.focus();\n\t\t\t\t\t\tconst end = message.length;\n\t\t\t\t\t\ttextarea.setSelectionRange(end, end);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[disabled],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showActions) return;\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tactionsRef.current &&\n\t\t\t\t\t!actionsRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [showActions]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showAttachmentMenuButton) {\n\t\t\t\tsetShowActions(false);\n\t\t\t}\n\t\t}, [showAttachmentMenuButton]);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (!voiceDraftSyncActiveRef.current) return;\n\t\t\tconst base = preRecordTextRef.current;\n\t\t\tconst separator = base && !base.endsWith(\" \") && transcribedText ? \" \" : \"\";\n\t\t\tsetValue(`${base}${separator}${transcribedText}`);\n\t\t}, [isRecording, transcribedText]);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tif (!value.trim() || disabled) return;\n\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\tpreRecordTextRef.current = \"\";\n\t\t\tonClearEditing?.();\n\t\t\tonSend(value.trim());\n\t\t\tsetValue(\"\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (textareaRef.current) {\n\t\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\t\ttextareaRef.current.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}, [value, disabled, onClearEditing, onSend]);\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (isStreaming || hideSendButton) return;\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t};\n\n\t\tconst handleUploadImageClick = () => {\n\t\t\tonUploadImageClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst handleAttachFileClick = () => {\n\t\t\tonAttachFileClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst hideVoiceTooltip = useCallback(() => {\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}\n\t\t\tsetShowVoiceTooltip(false);\n\t\t}, []);\n\n\t\tconst startVoiceTooltipTimer = useCallback(() => {\n\t\t\tif (isVoiceButtonDisabled || isRecording) return;\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t}\n\t\t\tvoiceTooltipTimerRef.current = setTimeout(() => {\n\t\t\t\tsetShowVoiceTooltip(true);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}, 2000);\n\t\t}, [isRecording, isVoiceButtonDisabled]);\n\n\t\tconst handleVoiceToggle = () => {\n\t\t\thideVoiceTooltip();\n\t\t\tsetShowActions(false);\n\t\t\tif (!onVoicePress || isVoiceButtonDisabled) return;\n\t\t\tif (!isRecording) {\n\t\t\t\tpreRecordTextRef.current = value;\n\t\t\t\tvoiceDraftSyncActiveRef.current = true;\n\t\t\t}\n\t\t\tonVoicePress();\n\t\t};\n\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-input-container\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-input-wrapper\",\n\t\t\t\t\t\t(isFocused || isRecording) && \"payman-v2-input-wrapper-focused\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-input-body\">\n\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t{editingMessageId && (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-banner\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-editing-banner-info\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-editing-icon-wrap\">\n\t\t\t\t\t\t\t\t\t\t\t<Pencil style={{ width: 12, height: 12 }} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-input-editing-label\">\n\t\t\t\t\t\t\t\t\t\t\tEditing message\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{onClearEditing && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-close\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Stop editing message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X style={{ width: 14, height: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tconst nextValue = e.target.value;\n\t\t\t\t\t\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\t\t\t\t\t\tsetValue(nextValue);\n\t\t\t\t\t\t\t\tif (editingMessageId && nextValue.length === 0) {\n\t\t\t\t\t\t\t\t\tonClearEditing?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\tif (disabled) e.preventDefault();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t\treadOnly={isInputLocked}\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tclassName=\"payman-v2-input-textarea\"\n\t\t\t\t\t\t\tdata-disabled={disabled ? \"true\" : \"false\"}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"payman-v2-input-controls\">\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-left\">\n\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-new-session-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showAttachmentMenuButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }} ref={actionsRef}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowActions((current) => !current)}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-attach-btn\",\n\t\t\t\t\t\t\t\t\t\t\tshowActions && \"payman-v2-input-attach-btn-active\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Attach\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 20, height: 20, strokeWidth: 2 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t\t\t{showActions && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-menu\"\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{showUploadImageButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleUploadImageClick}\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\t\t\t<ImagePlus\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\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\t\t\tUpload image\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{showAttachFileButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleAttachFileClick}\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\t\t\t<Paperclip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\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\t\t\tAttach file\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{showVoiceTooltip && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-voice-tooltip\"\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<div className=\"payman-v2-input-voice-tooltip-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tChat with your voice\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-arrow\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleVoiceToggle}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tonFocus={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonBlur={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mic-btn\",\n\t\t\t\t\t\t\t\t\t\t\tisRecording && \"payman-v2-input-mic-recording\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Mic style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-mic-indicator\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{!hideSendButton && (\n\t\t\t\t\t\t\t<div className=\"payman-v2-input-controls-right\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-send-btn\",\n\t\t\t\t\t\t\t\t\t\tsendDisabled && \"payman-v2-input-send-btn-disabled\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowUp\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.5 }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-send-icon\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<p className=\"payman-v2-input-disclaimer\">\n\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Download, Loader2, X } from \"lucide-react\";\n\nexport type ImageLightboxV2Props = {\n\tsrc: string | null;\n\talt: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightboxV2({ src, alt, onClose }: ImageLightboxV2Props) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t},\n\t\t[onClose]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [src, handleKeyDown]);\n\n\tconst handleDownload = () => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = src;\n\t\ta.download = alt.trim() ? alt : \"image\";\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{src ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={src}\n\t\t\t\t\tclassName=\"payman-v2-lightbox\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-lightbox-controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleDownload();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-lightbox-content\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={alt || \"Image preview\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-lightbox-loading\">\n\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\taria-hidden={true}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"payman-v2-spin 0.6s linear infinite\",\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<p className=\"payman-v2-lightbox-loading-text\">\n\t\t\t\t\t\t\t\t\tLoading image\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) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-lightbox-img-wrapper\">\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: isImageLoaded ? 1 : 0.92,\n\t\t\t\t\t\t\t\t\topacity: isImageLoaded ? 1 : 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\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<img\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-img\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\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 { useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type {\n\tChatAvailability,\n\tChatCallbacks,\n\tChatConfig,\n\tMessageActionsConfig,\n\tMessageDisplay,\n\tPaymanChatProps,\n\tPaymanChatRef,\n\tSessionHistoryOptions,\n\tVoiceOptions,\n} from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tisFriendlyWorkflowError,\n\tgetConflictErrorMessage,\n} from \"../../utils/errorMessages\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport {\n\tcaptureSentryError,\n\tsubscribeToCfRay,\n\ttype ChatSessionContext,\n} from \"../../utils/sentryContext\";\nimport { ResetSessionConfirmModal } from \"../ResetSessionConfirmModal\";\nimport { MessageListV2 } from \"../v2/MessageListV2\";\nimport type { MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { ChatInputV2 } from \"../v2/ChatInputV2\";\nimport type { ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { ImageLightboxV2 } from \"../v2/ImageLightboxV2\";\nimport type { VerificationStatusV2 } from \"../v2/VerificationCardV2\";\nimport {\n\tSessionHistorySidebar,\n\ttype OptimisticSessionActivity,\n} from \"../SessionHistorySidebar\";\n\n// ============================================\n// Defaults (see ref-chatref-config plan)\n// ============================================\n\nconst DEFAULT_PLACEHOLDER = \"Type your message...\";\nconst DEFAULT_EMPTY_STATE_TEXT = \"What can I help with?\";\nconst DEFAULT_AVAILABILITY: ChatAvailability = { state: \"ready\" };\nconst UNTITLED_SESSION = \"Untitled session\";\nconst MOBILE_BREAKPOINT = 640;\n\nfunction useIsMobileViewport(): 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\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n\t\tconst onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\t\tsetIsMobile(mql.matches);\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, []);\n\n\treturn isMobile;\n}\n\nfunction normalizeVoice(v: ChatConfig[\"ui\"] extends { input?: infer I } ? I extends { voice?: infer V } ? V : never : never): { enabled: boolean; options: VoiceOptions } {\n\tif (v === true) return { enabled: true, options: {} };\n\tif (v && typeof v === \"object\") return { enabled: true, options: v };\n\treturn { enabled: false, options: {} };\n}\n\nfunction normalizeAttachments(a: unknown): {\n\tshowMenu: boolean;\n\tuploadImage: boolean;\n\tattachFile: boolean;\n} {\n\tif (a === false) return { showMenu: false, uploadImage: false, attachFile: false };\n\tif (a === undefined || a === true) return { showMenu: true, uploadImage: true, attachFile: true };\n\tif (typeof a === \"object\" && a !== null) {\n\t\tconst obj = a as { uploadImage?: boolean; attachFile?: boolean };\n\t\tconst uploadImage = obj.uploadImage !== false;\n\t\tconst attachFile = obj.attachFile !== false;\n\t\treturn { showMenu: uploadImage || attachFile, uploadImage, attachFile };\n\t}\n\treturn { showMenu: true, uploadImage: true, attachFile: true };\n}\n\nfunction normalizeSessionHistory(\n\ts: ChatConfig[\"ui\"] extends { sessionHistory?: infer S } ? S : never,\n): { enabled: boolean; options: SessionHistoryOptions } {\n\tif (s === true) return { enabled: true, options: {} };\n\tif (s && typeof s === \"object\") return { enabled: true, options: s };\n\treturn { enabled: false, options: {} };\n}\n\n// ============================================\n// Sentry auto-context — now pulled from nested config paths\n// ============================================\n\nfunction useSentryChatCallbacks(\n\tcallbacks: ChatCallbacks | undefined,\n\tconfig: ChatConfig,\n): ChatCallbacks {\n\tconst sentryCtxRef = useRef<ChatSessionContext>({});\n\tconst callbacksRef = useRef(callbacks);\n\tcallbacksRef.current = callbacks;\n\n\tconst initialSessionId = config.session?.initialId;\n\tconst apiHeaders = config.api?.headers;\n\tconst workflowName = config.workflow?.name;\n\tconst sessionOwnerId = config.session?.owner?.id;\n\n\tuseEffect(() => {\n\t\tsentryCtxRef.current.workflowName = workflowName;\n\t\tsentryCtxRef.current.sessionOwnerId = sessionOwnerId;\n\t\tif (initialSessionId) {\n\t\t\tsentryCtxRef.current.sessionId = initialSessionId;\n\t\t}\n\t\tif (apiHeaders) {\n\t\t\tsentryCtxRef.current.customerId =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-id\"] ?? sentryCtxRef.current.customerId;\n\t\t\tsentryCtxRef.current.customerEmail =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-email\"] ?? sentryCtxRef.current.customerEmail;\n\t\t}\n\t}, [workflowName, sessionOwnerId, initialSessionId, apiHeaders]);\n\n\tuseEffect(() => {\n\t\tconst endpoint = config.api.streamEndpoint || \"/api/workflows/ask/stream\";\n\t\treturn subscribeToCfRay(endpoint, (cfRay) => {\n\t\t\tsentryCtxRef.current.cfRay = cfRay;\n\t\t});\n\t}, [config.api.streamEndpoint]);\n\n\treturn useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\tonMessageSent: (msg) => callbacksRef.current?.onMessageSent?.(msg),\n\t\t\tonStreamStart: () => callbacksRef.current?.onStreamStart?.(),\n\t\t\tonStreamComplete: (message: MessageDisplay) => {\n\t\t\t\tif (message.executionId) sentryCtxRef.current.executionId = message.executionId;\n\t\t\t\tif (message.sessionId) sentryCtxRef.current.sessionId = message.sessionId;\n\n\t\t\t\tconst content = message.content ?? \"\";\n\t\t\t\tconst looksLikeRawErr =\n\t\t\t\t\tcontent.length >= 10 && (content.includes(\"errorType=\") || /failed:\\s*\\{/.test(content));\n\t\t\t\tconst completedEmpty =\n\t\t\t\t\t!message.isStreaming &&\n\t\t\t\t\t!message.isCancelled &&\n\t\t\t\t\tcontent.length === 0 &&\n\t\t\t\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\t\t\t\tconst hasConflict = !!getConflictErrorMessage(message.errorDetails);\n\t\t\t\tconst hasFriendlyErr = isFriendlyWorkflowError(message.errorDetails);\n\n\t\t\t\tconst shouldCapture =\n\t\t\t\t\tmessage.isError || hasConflict || hasFriendlyErr || looksLikeRawErr || completedEmpty;\n\n\t\t\t\tif (shouldCapture) {\n\t\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\t\tcaptureSentryError(\n\t\t\t\t\t\t`Workflow error: ${message.errorDetails || content || \"Unknown error\"}`,\n\t\t\t\t\t\t{ ...sentryCtxRef.current },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcallbacksRef.current?.onStreamComplete?.(message);\n\t\t\t},\n\t\t\tonError: (error: Error) => {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\tcaptureSentryError(error, { ...sentryCtxRef.current });\n\t\t\t\tcallbacksRef.current?.onError?.(error);\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId: string) => {\n\t\t\t\tsentryCtxRef.current.sessionId = sessionId;\n\t\t\t\tcallbacksRef.current?.onSessionIdChange?.(sessionId);\n\t\t\t},\n\t\t\tonExecutionTraceClick: (data) => callbacksRef.current?.onExecutionTraceClick?.(data),\n\t\t\tonResetSession: () => callbacksRef.current?.onResetSession?.(),\n\t\t\tonUploadImageClick: () => callbacksRef.current?.onUploadImageClick?.(),\n\t\t\tonAttachFileClick: () => callbacksRef.current?.onAttachFileClick?.(),\n\t\t\tonUserActionRequired: (req) => callbacksRef.current?.onUserActionRequired?.(req),\n\t\t\tonUserActionEvent: (evType, msg) => callbacksRef.current?.onUserActionEvent?.(evType, msg),\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n}\n\n// ============================================\n// Component\n// ============================================\n\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(function PaymanChat(\n\t{\n\t\tconfig,\n\t\tcallbacks = {},\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t\tonLoadMoreMessages: _onLoadMoreMessages,\n\t\tisLoadingMoreMessages: _isLoadingMoreMessages,\n\t\thasMoreMessages: _hasMoreMessages,\n\t},\n\tref,\n) {\n\t// onLoadMoreMessages / isLoadingMoreMessages / hasMoreMessages are reserved for\n\t// future wiring through MessageListV2. Preserved on the public props shape so\n\t// downstream call-sites don't break during migration.\n\t// Sentry\n\tuseEffect(() => {\n\t\tif (config.observability?.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.observability.sentryDsn);\n\t\t}\n\t}, [config.observability?.sentryDsn]);\n\n\tconst isMobileViewport = useIsMobileViewport();\n\n\t// ============================================\n\t// UI state\n\t// ============================================\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\tconst [lightboxSrc, setLightboxSrc] = useState<string | null>(null);\n\tconst [lightboxAlt, setLightboxAlt] = useState(\"\");\n\tconst [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n\tconst [isResetSessionConfirmOpen, setIsResetSessionConfirmOpen] = useState(false);\n\tconst [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);\n\tconst [optimisticSessionActivity, setOptimisticSessionActivity] =\n\t\tuseState<OptimisticSessionActivity | null>(null);\n\t// Sessions that currently have an in-flight workflow stream — drives the\n\t// subtle \"live\" mark in the sidebar. Tracked locally via callbacks so we\n\t// don't have to thread per-session stream state out of the SDK.\n\tconst [streamingSessionIds, setStreamingSessionIds] = useState<\n\t\tReadonlySet<string>\n\t>(() => new Set());\n\t// Sessions whose stream finished within the last few seconds — drives the\n\t// brief \"done\" mark. Entries are removed automatically by a timer.\n\tconst [recentlyCompletedSessionIds, setRecentlyCompletedSessionIds] =\n\t\tuseState<ReadonlySet<string>>(() => new Set());\n\tconst recentlyCompletedTimersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n\t\tnew Map(),\n\t);\n\tconst RECENTLY_COMPLETED_DURATION_MS = 4000;\n\n\tconst markSessionStreaming = useCallback((sessionId: string) => {\n\t\tsetStreamingSessionIds((prev) => {\n\t\t\tif (prev.has(sessionId)) return prev;\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.delete(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tconst existingTimer = recentlyCompletedTimersRef.current.get(sessionId);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t\trecentlyCompletedTimersRef.current.delete(sessionId);\n\t\t}\n\t}, []);\n\n\tconst markSessionCompleted = useCallback((sessionId: string) => {\n\t\tsetStreamingSessionIds((prev) => {\n\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.delete(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tconst existingTimer = recentlyCompletedTimersRef.current.get(sessionId);\n\t\tif (existingTimer) clearTimeout(existingTimer);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\t\tconst next = new Set(prev);\n\t\t\t\tnext.delete(sessionId);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\trecentlyCompletedTimersRef.current.delete(sessionId);\n\t\t}, RECENTLY_COMPLETED_DURATION_MS);\n\t\trecentlyCompletedTimersRef.current.set(sessionId, timer);\n\t}, []);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const timer of recentlyCompletedTimersRef.current.values()) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\trecentlyCompletedTimersRef.current.clear();\n\t\t},\n\t\t[],\n\t);\n\tconst chatInputV2Ref = useRef<ChatInputV2Handle>(null);\n\tconst messageListV2Ref = useRef<MessageListV2Handle>(null);\n\tconst resetToEmptyStateRef = useRef(false);\n\tconst latestSessionIdRef = useRef<string | undefined>(\n\t\tconfig.session?.initialId,\n\t);\n\tconst lastOptimisticSessionIdRef = useRef<string | undefined>(undefined);\n\n\tconst buildOptimisticSessionTitle = useCallback((message: string): string => {\n\t\tconst normalized = message.replace(/\\s+/g, \" \").trim();\n\t\tif (!normalized) return UNTITLED_SESSION;\n\t\treturn normalized.length <= 72\n\t\t\t? normalized\n\t\t\t: `${normalized.slice(0, 69).trimEnd()}...`;\n\t}, []);\n\n\tconst sentryCallbacks = useSentryChatCallbacks(callbacks, config);\n\tconst mergedCallbacks = useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\t...sentryCallbacks,\n\t\t\tonMessageSent: (message) => {\n\t\t\t\tsentryCallbacks.onMessageSent?.(message);\n\t\t\t\tconst sessionId = latestSessionIdRef.current;\n\t\t\t\tif (!sessionId) return;\n\t\t\t\tlastOptimisticSessionIdRef.current = sessionId;\n\t\t\t\tmarkSessionStreaming(sessionId);\n\t\t\t\tsetOptimisticSessionActivity({\n\t\t\t\t\tkey: `message:${sessionId}:${Date.now()}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tlastMessageAt: new Date().toISOString(),\n\t\t\t\t\tsessionTitle: buildOptimisticSessionTitle(message),\n\t\t\t\t});\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId) => {\n\t\t\t\tconst previousSessionId = latestSessionIdRef.current;\n\t\t\t\tlatestSessionIdRef.current = sessionId;\n\t\t\t\tsentryCallbacks.onSessionIdChange?.(sessionId);\n\t\t\t\tif (\n\t\t\t\t\tpreviousSessionId &&\n\t\t\t\t\tpreviousSessionId !== sessionId\n\t\t\t\t) {\n\t\t\t\t\t// If a stream was tagged against the old (placeholder)\n\t\t\t\t\t// session id, migrate the tag to the server-assigned id so\n\t\t\t\t\t// the live mark stays on the same row.\n\t\t\t\t\tsetStreamingSessionIds((prev) => {\n\t\t\t\t\t\tif (!prev.has(previousSessionId)) return prev;\n\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\tnext.delete(previousSessionId);\n\t\t\t\t\t\tnext.add(sessionId);\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tpreviousSessionId &&\n\t\t\t\t\tpreviousSessionId !== sessionId &&\n\t\t\t\t\tlastOptimisticSessionIdRef.current === previousSessionId\n\t\t\t\t) {\n\t\t\t\t\tlastOptimisticSessionIdRef.current = sessionId;\n\t\t\t\t\tsetOptimisticSessionActivity((prev) =>\n\t\t\t\t\t\tprev\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\tkey: `session:${sessionId}:${Date.now()}`,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\tpreviousSessionId,\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tkey: `session:${sessionId}:${Date.now()}`,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\tpreviousSessionId,\n\t\t\t\t\t\t\t\t\tlastMessageAt: new Date().toISOString(),\n\t\t\t\t\t\t\t\t\tsessionTitle: UNTITLED_SESSION,\n\t\t\t\t\t\t\t },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonStreamComplete: (message) => {\n\t\t\t\tsentryCallbacks.onStreamComplete?.(message);\n\t\t\t\tconst sessionId = message.sessionId ?? latestSessionIdRef.current;\n\t\t\t\tif (!sessionId) return;\n\t\t\t\tmarkSessionCompleted(sessionId);\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tsentryCallbacks.onError?.(error);\n\t\t\t\t// Best-effort cleanup so a failed stream doesn't leave a\n\t\t\t\t// permanent \"live\" mark in the sidebar.\n\t\t\t\tconst sessionId = latestSessionIdRef.current;\n\t\t\t\tif (!sessionId) return;\n\t\t\t\tsetStreamingSessionIds((prev) => {\n\t\t\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\tnext.delete(sessionId);\n\t\t\t\t\treturn next;\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t\t[\n\t\t\tbuildOptimisticSessionTitle,\n\t\t\tmarkSessionCompleted,\n\t\t\tmarkSessionStreaming,\n\t\t\tsentryCallbacks,\n\t\t],\n\t);\n\tconst chat = useChatV2(config, mergedCallbacks);\n\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tprependMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t\tloadSession,\n\t\tuserActionState,\n\t\tapproveUserAction,\n\t\trejectUserAction,\n\t\tresendOtp,\n\t\tloadingSessionId,\n\t} = chat;\n\n\tuseEffect(() => {\n\t\tif (resetToEmptyStateRef.current) {\n\t\t\tif (messages.length === 0) {\n\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\tresetToEmptyStateRef.current = false;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (messages.length > 0 && !hasEverSentMessage) setHasEverSentMessage(true);\n\t}, [messages.length, hasEverSentMessage]);\n\n\tuseEffect(() => {\n\t\tif (!editingMessageId) return;\n\t\tconst stillExists = messages.some(\n\t\t\t(m) => m.id === editingMessageId && m.role === \"user\",\n\t\t);\n\t\tif (!stillExists) setEditingMessageId(null);\n\t}, [editingMessageId, messages]);\n\n\t// ============================================\n\t// Derived config (with defaults)\n\t// ============================================\n\tconst ui = config.ui ?? {};\n\tconst availability = config.availability ?? DEFAULT_AVAILABILITY;\n\tconst placeholder = ui.input?.placeholder ?? DEFAULT_PLACEHOLDER;\n\tconst emptyStateText = ui.emptyState?.text ?? DEFAULT_EMPTY_STATE_TEXT;\n\tconst showEmptyStateIcon = ui.emptyState?.icon ?? true;\n\tconst emptyStateComponent = ui.emptyState?.content;\n\tconst showResetButton = ui.input?.showResetButton ?? false;\n\tconst attachments = normalizeAttachments(ui.input?.attachments);\n\tconst voice = normalizeVoice(ui.input?.voice as never);\n\tconst sessionHistory = normalizeSessionHistory(ui.sessionHistory as never);\n\tconst messageActionsConfig = ui.messages?.actions;\n\t// Note: ui.agent, ui.messages.avatars/timestamps/streamingDot, ui.execution.*,\n\t// ui.layout are reserved for future plumbing into MessageListV2 / AssistantMessageV2.\n\t// They're part of the public config shape today and read by renderers internally\n\t// via message.isHistorical — full theming pass-through is a follow-up.\n\n\tconst messageActions = useMemo<Required<MessageActionsConfig>>(\n\t\t() => ({\n\t\t\tuserMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t},\n\t\t\tassistantMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\t},\n\t\t}),\n\t\t[messageActionsConfig],\n\t);\n\n\t// ============================================\n\t// Voice\n\t// ============================================\n\tconst {\n\t\ttranscribedText,\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: voice.options.lang ?? \"en-US\",\n\t\t\tinterimResults: voice.options.interimResults !== false,\n\t\t\tcontinuous: voice.options.continuous !== false,\n\t\t},\n\t\t{\n\t\t\tonEnd: () => {},\n\t\t\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t},\n\t);\n\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t\treturn;\n\t\t}\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [clearTranscript, isRecording, startRecording, stopRecording, voiceAvailable]);\n\n\tconst handleCancelRecording = () => {\n\t\tstopRecording();\n\t\tclearTranscript();\n\t};\n\tconst handleConfirmRecording = () => {\n\t\tstopRecording();\n\t};\n\n\t// ============================================\n\t// Reset session (with confirm modal)\n\t// ============================================\n\tconst performResetSession = useCallback(() => {\n\t\tresetToEmptyStateRef.current = true;\n\t\tsetEditingMessageId(null);\n\t\tsetIsResetSessionConfirmOpen(false);\n\t\tsetLightboxSrc(null);\n\t\tsetLightboxAlt(\"\");\n\t\tsetOptimisticSessionActivity(null);\n\t\tlatestSessionIdRef.current = undefined;\n\t\tlastOptimisticSessionIdRef.current = undefined;\n\t\tchatInputV2Ref.current?.setDraft(\"\");\n\t\tclearTranscript();\n\t\tif (isRecording) stopRecording();\n\t\tresetSession();\n\t\tcallbacks.onResetSession?.();\n\t}, [callbacks.onResetSession, clearTranscript, isRecording, resetSession, stopRecording]);\n\n\tconst requestResetSession = useCallback(() => setIsResetSessionConfirmOpen(true), []);\n\tconst closeResetSessionConfirm = useCallback(() => setIsResetSessionConfirmOpen(false), []);\n\n\t// ============================================\n\t// Context\n\t// ============================================\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t\tisWaitingForResponse,\n\t\t],\n\t);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tresetSession: performResetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t}),\n\t\t[performResetSession, clearMessages, cancelStream, getSessionId, getMessages, loadSession],\n\t);\n\n\tconst [v2VerificationPending, setV2VerificationPending] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetV2VerificationPending(false);\n\t}, [\n\t\tuserActionState.request?.userActionId,\n\t\tuserActionState.clearOtpTrigger,\n\t\tuserActionState.result,\n\t]);\n\n\t// ============================================\n\t// Disabled state\n\t// ============================================\n\tif (availability.state === \"disabled\") {\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"bg-background overflow-hidden flex flex-col flex-[4]\", className)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t{availability.reason ?? (\n\t\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\tconst isReadOnly = availability.state === \"readOnly\";\n\n\t// ============================================\n\t// Per-config helpers\n\t// ============================================\n\tconst handleImageClick = (src: string, alt: string) => {\n\t\tsetLightboxSrc(src);\n\t\tsetLightboxAlt(alt);\n\t};\n\n\tconst v2UserAction = useMemo(() => {\n\t\tif (!userActionState.request) return null;\n\t\tconst req = userActionState.request;\n\t\tlet status: VerificationStatusV2 = \"pending\";\n\t\tif (v2VerificationPending) status = \"verifying\";\n\t\telse if (userActionState.result === \"approved\") status = \"approved\";\n\t\telse if (userActionState.result === \"rejected\") status = \"rejected\";\n\t\treturn {\n\t\t\tmessageId: `ua-${req.userActionId || Date.now()}`,\n\t\t\taction: {\n\t\t\t\ttype: req.userActionType || \"generic\",\n\t\t\t\tmessage: req.message || \"Verify this action\",\n\t\t\t\tamount: req.metadata?.amount,\n\t\t\t\tpayeeName: req.metadata?.payeeName,\n\t\t\t},\n\t\t\tstatus,\n\t\t\tclearOtpTrigger: userActionState.clearOtpTrigger,\n\t\t};\n\t}, [\n\t\tuserActionState.request,\n\t\tuserActionState.result,\n\t\tuserActionState.clearOtpTrigger,\n\t\tv2VerificationPending,\n\t]);\n\n\tconst hideV2SendDuringVerification =\n\t\tv2UserAction != null &&\n\t\tv2UserAction.status !== \"approved\" &&\n\t\tv2UserAction.status !== \"rejected\";\n\n\tconst handleV2Send = (text: string) => {\n\t\tif (isRecording) stopRecording();\n\t\tif (text.trim()) {\n\t\t\tsetEditingMessageId(null);\n\t\t\tvoid sendMessage(text.trim());\n\t\t}\n\t};\n\n\tconst handleEditMessageDraft = useCallback(\n\t\t(messageId: string) => {\n\t\t\tconst targetMessage = messages.find((m) => m.id === messageId);\n\t\t\tif (!targetMessage?.content.trim()) return;\n\t\t\tsetEditingMessageId(messageId);\n\t\t\tchatInputV2Ref.current?.setDraft(targetMessage.content);\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tmessageListV2Ref.current?.scrollToBottom(\"smooth\");\n\t\t\t});\n\t\t},\n\t\t[messages],\n\t);\n\n\tconst handleRetryUserMessage = useCallback(\n\t\t(messageId: string) => {\n\t\t\tif (isWaitingForResponse) return;\n\t\t\tconst target = messages.find((m) => m.id === messageId && m.role === \"user\");\n\t\t\tif (!target?.content.trim()) return;\n\t\t\tvoid sendMessage(target.content.trim());\n\t\t\tconst bump = () => messageListV2Ref.current?.scrollToBottom(\"instant\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tbump();\n\t\t\t\tqueueMicrotask(() => window.setTimeout(bump, 120));\n\t\t\t});\n\t\t},\n\t\t[isWaitingForResponse, messages, sendMessage],\n\t);\n\n\tconst handleClearEditing = useCallback(() => setEditingMessageId(null), []);\n\n\tconst isEmpty = messages.length === 0;\n\tconst showEmptyShell = isEmpty && !hasEverSentMessage;\n\tconst currentSessionId = getSessionId();\n\n\tuseEffect(() => {\n\t\tlatestSessionIdRef.current = currentSessionId;\n\t}, [currentSessionId]);\n\n\t// ============================================\n\t// Render\n\t// ============================================\n\tconst inputElement = !isReadOnly && (\n\t\t<ChatInputV2\n\t\t\tref={chatInputV2Ref}\n\t\t\tonSend={handleV2Send}\n\t\t\tonCancel={cancelStream}\n\t\t\tdisabled={false}\n\t\t\tisStreaming={isWaitingForResponse}\n\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\tenableVoice={voice.enabled}\n\t\t\ttranscribedText={voice.enabled ? transcribedText : \"\"}\n\t\t\tvoiceAvailable={voice.enabled && voiceAvailable}\n\t\t\tisRecording={isRecording}\n\t\t\tonVoicePress={voice.enabled ? handleVoicePress : undefined}\n\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\tshowResetSession={showResetButton}\n\t\t\tonResetSession={requestResetSession}\n\t\t\tshowAttachmentButton={attachments.showMenu}\n\t\t\tshowUploadImageButton={attachments.uploadImage}\n\t\t\tshowAttachFileButton={attachments.attachFile}\n\t\t\tonUploadImageClick={callbacks.onUploadImageClick}\n\t\t\tonAttachFileClick={callbacks.onAttachFileClick}\n\t\t\teditingMessageId={editingMessageId}\n\t\t\tonClearEditing={handleClearEditing}\n\t\t\thideSendButton={hideV2SendDuringVerification}\n\t\t/>\n\t);\n\n\tconst handleSelectSession = useCallback(\n\t\tasync (session: { sessionId: string }) => {\n\t\t\t// Skip if the user is already on this session or a load for it\n\t\t\t// is already in flight. The hook also dedupes internally — this\n\t\t\t// short-circuit just avoids the useless state churn (sessionId\n\t\t\t// reset, callbacks, etc).\n\t\t\tif (\n\t\t\t\tsession.sessionId === currentSessionId ||\n\t\t\t\tsession.sessionId === loadingSessionId\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Prevent the merged `onSessionIdChange` callback (fired synchronously by\n\t\t\t// loadSession) from promoting this session to the top of the sidebar.\n\t\t\t// Optimistic promotion should only happen when the user sends a new\n\t\t\t// message in a session, not when they click to view one.\n\t\t\tlastOptimisticSessionIdRef.current = undefined;\n\t\t\tlatestSessionIdRef.current = session.sessionId;\n\t\t\t// Skip the empty-state shell so the messages area shows the\n\t\t\t// loading spinner instead of \"What can I help with?\".\n\t\t\tsetHasEverSentMessage(true);\n\t\t\ttry {\n\t\t\t\tawait loadSession(session.sessionId);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"Failed to load session\", err);\n\t\t\t}\n\t\t},\n\t\t[currentSessionId, loadingSessionId, loadSession],\n\t);\n\n\tconst sidebarElement = sessionHistory.enabled ? (\n\t\t<SessionHistorySidebar\n\t\t\tconfig={config}\n\t\t\toptions={sessionHistory.options}\n\t\t\tactiveSessionId={currentSessionId}\n\t\t\tloadingSessionId={loadingSessionId}\n\t\t\tstreamingSessionIds={streamingSessionIds}\n\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\toptimisticActivity={optimisticSessionActivity}\n\t\t\tonSelectSession={handleSelectSession}\n\t\t\tmobileOpen={mobileSidebarOpen}\n\t\t\tonMobileOpenChange={setMobileSidebarOpen}\n\t\t/>\n\t) : null;\n\n\tconst mainPanel = (\n\t\t<div\n\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\tstyle={{\n\t\t\t\tflexDirection: isMobileViewport ? \"column\" : \"row\",\n\t\t\t\talignItems: \"stretch\",\n\t\t\t\tminHeight: 0,\n\t\t\t\toverflow: \"hidden\",\n\t\t\t}}\n\t\t>\n\t\t\t{sidebarElement}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: \"1 1 0%\",\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\talignItems: showEmptyShell ? \"center\" : \"stretch\",\n\t\t\t\t\tjustifyContent: showEmptyShell ? \"center\" : \"flex-start\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{showEmptyShell ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\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\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\tmarginTop: \"1.5rem\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\ttext={emptyStateText}\n\t\t\t\t\t\t\tcontent={emptyStateComponent}\n\t\t\t\t\t\t\tshowIcon={showEmptyStateIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\tref={messageListV2Ref}\n\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\tisLoadingSession={!!loadingSessionId}\n\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\tonImageClick={handleImageClick}\n\t\t\t\t\t\tonExecutionTraceClick={callbacks.onExecutionTraceClick}\n\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\tuserAction={v2UserAction}\n\t\t\t\t\t\tonApproveAction={async (_id, otp) => {\n\t\t\t\t\t\t\tsetV2VerificationPending(true);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait approveUserAction(otp);\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tsetV2VerificationPending(false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRejectAction={async () => {\n\t\t\t\t\t\t\tsetV2VerificationPending(true);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait rejectUserAction();\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tsetV2VerificationPending(false);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonResendAction={async () => {\n\t\t\t\t\t\t\tawait resendOtp();\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{inputElement}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\"payman-v2-root\", className)}\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{mainPanel}\n\n\t\t\t\t<ImageLightboxV2\n\t\t\t\t\tsrc={lightboxSrc}\n\t\t\t\t\talt={lightboxAlt}\n\t\t\t\t\tonClose={() => setLightboxSrc(null)}\n\t\t\t\t/>\n\t\t\t\t<ResetSessionConfirmModal\n\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n});\n\n// ============================================\n// Tiny empty-state renderer (v2 keeps it inline)\n// ============================================\n\nfunction EmptyState({\n\ttext,\n\tcontent,\n\tshowIcon,\n}: {\n\ttext: string;\n\tcontent?: React.ReactNode;\n\tshowIcon: boolean;\n}) {\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tpadding: \"24px 16px\",\n\t\t\t\tgap: 12,\n\t\t\t\tflex: 1,\n\t\t\t\tminHeight: 0,\n\t\t\t}}\n\t\t>\n\t\t\t{content}\n\t\t\t{showIcon && !content && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 40,\n\t\t\t\t\t\tborderRadius: 12,\n\t\t\t\t\t\tbackground: \"var(--payman-v2-accent-bg, rgba(0,0,0,0.06))\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: 16,\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcolor: \"var(--payman-v2-text-1, #111)\",\n\t\t\t\t\twhiteSpace: \"pre-wrap\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{text}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Check, Copy, Menu, RotateCcw } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { ChatHeaderProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatHeader({\n\tsessionId,\n\tonCopySessionId,\n\tonNewSession,\n\tshowResetSession = false,\n\tonToggleSidebar,\n\tchildren,\n\tclassName,\n}: ChatHeaderProps) {\n\tconst [copiedSessionId, setCopiedSessionId] = useState(false);\n\n\tconst handleCopySessionId = async () => {\n\t\tif (sessionId && onCopySessionId) {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(sessionId);\n\t\t\t\tsetCopiedSessionId(true);\n\t\t\t\tsetTimeout(() => setCopiedSessionId(false), 2000);\n\t\t\t\tonCopySessionId(sessionId);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to copy session ID:\", error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst hasActions = showResetSession || !!children;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex items-center justify-between gap-3\",\n\t\t\t\t\"px-4 h-14 flex-shrink-0 w-full\",\n\t\t\t\t\"border-b border-border/60 bg-card/80 backdrop-blur-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex items-center gap-3 flex-1 min-w-0\">\n\t\t\t\t{onToggleSidebar && (\n\t\t\t\t\t<HeaderButton\n\t\t\t\t\t\tonClick={onToggleSidebar}\n\t\t\t\t\t\ttitle=\"Open session history\"\n\t\t\t\t\t\tclassName=\"sm:hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Menu className=\"w-4 h-4\" />\n\t\t\t\t\t</HeaderButton>\n\t\t\t\t)}\n\t\t\t\t<div className=\"flex flex-col justify-center min-w-0\">\n\t\t\t\t\t<span className=\"text-sm font-semibold text-foreground leading-tight truncate\">\n\t\t\t\t\t\tChat\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{sessionId && (\n\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t<motion.button\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\t\tonClick={handleCopySessionId}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1 mt-0.5 group\"\n\t\t\t\t\t\t\t\ttitle={`Copy: ${sessionId}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"font-mono text-[10px] leading-none text-muted-foreground group-hover:text-foreground transition-colors truncate max-w-[120px]\">\n\t\t\t\t\t\t\t\t\t{sessionId.length > 20\n\t\t\t\t\t\t\t\t\t\t? `${sessionId.substring(0, 8)}…${sessionId.slice(-8)}`\n\t\t\t\t\t\t\t\t\t\t: sessionId}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t{copiedSessionId ? (\n\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"check\"\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Check className=\"w-2.5 h-2.5 text-emerald-500\" />\n\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"copy\"\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Copy className=\"w-2.5 h-2.5 text-muted-foreground/50 group-hover:text-muted-foreground transition-colors\" />\n\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t</motion.button>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{hasActions && (\n\t\t\t\t<div className=\"flex items-center gap-1.5 flex-shrink-0\">\n\t\t\t\t\t{showResetSession && onNewSession && (\n\t\t\t\t\t\t<HeaderButton onClick={onNewSession} title=\"New Session\">\n\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" />\n\t\t\t\t\t\t\t<span className=\"hidden sm:inline\">Reset</span>\n\t\t\t\t\t\t</HeaderButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst HeaderButton = forwardRef<\n\tHTMLButtonElement,\n\tReact.ButtonHTMLAttributes<HTMLButtonElement> & { title?: string }\n>(({ children, className, ...props }, ref) => (\n\t<button\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg\",\n\t\t\t\"text-xs font-medium text-muted-foreground\",\n\t\t\t\"border border-border/50 bg-card/50\",\n\t\t\t\"hover:bg-muted hover:text-foreground hover:border-border\",\n\t\t\t\"active:scale-[0.97] transition-all duration-150\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</button>\n));\nHeaderButton.displayName = \"HeaderButton\";\n","import { useEffect, useRef, useState } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\nconst COMPLETE_PULSE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst [completePulse, setCompletePulse] = useState(false);\n\tconst prevLenRef = useRef(0);\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 =\n\t\tvalue.length === safeMaxLength && /^\\d+$/.test(value);\n\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [disabled]);\n\n\t// Trigger completion pulse when last digit is typed\n\tuseEffect(() => {\n\t\tlet t: number | undefined;\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tsetCompletePulse(true);\n\t\t\tt = window.setTimeout(\n\t\t\t\t() => setCompletePulse(false),\n\t\t\t\tCOMPLETE_PULSE_MS\n\t\t\t);\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t\treturn () => {\n\t\t\tif (typeof t === \"number\") {\n\t\t\t\twindow.clearTimeout(t);\n\t\t\t}\n\t\t};\n\t}, [isFull, value.length, safeMaxLength]);\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, char: string) => {\n\t\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (\n\t\tindex: number,\n\t\te: React.KeyboardEvent<HTMLInputElement>\n\t) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\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\treturn;\n\t\t}\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex justify-center\",\n\t\t\t\terror && \"payman-otp-shake\",\n\t\t\t\tcompletePulse && \"payman-otp-complete-pulse\"\n\t\t\t)}\n\t\t\tstyle={{ gap: 10 }}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"text-center font-semibold rounded-lg\",\n\t\t\t\t\t\t\"payman-otp-input otp-input\",\n\t\t\t\t\t\t\"transition-all duration-150 cursor-text\",\n\t\t\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t\t\t\terror && \"payman-otp-input--error\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 44,\n\t\t\t\t\t\theight: 50,\n\t\t\t\t\t\tfontSize: 20,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\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 { Loader2, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\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\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 [otpError, setOtpError] = useState(false);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\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 (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((p) => p - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — clearOtpTrigger fires, 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(resetActionState, ACTION_PENDING_TIMEOUT_MS);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Auto-submit when OTP is complete (digits only, length matches schema).\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\t// Focus trap\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusable = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n\t\t\t\t)\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusable();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key !== \"Tab\") return;\n\t\t\tconst items = getFocusable();\n\t\t\tif (!items.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst first = items[0];\n\t\t\tconst last = items[items.length - 1];\n\t\t\tconst active = document.activeElement as HTMLElement | null;\n\t\t\tconst inDialog = active ? dialog.contains(active) : false;\n\t\t\tif (e.shiftKey) {\n\t\t\t\tif (!inDialog || active === first) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!inDialog || active === last) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfirst.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\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\t// handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !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\n\treturn (\n\t\t<div\n\t\t\tclassName=\"payman-modal-backdrop\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\tinset: 0,\n\t\t\t\tzIndex: 10000,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpadding: 16,\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 backdrop-blur-sm payman-modal-backdrop-overlay payman-modal-animate\"\n\t\t\t\taria-hidden\n\t\t\t\tstyle={{\n\t\t\t\t\tbackground:\n\t\t\t\t\t\t\"var(--payman-modal-backdrop-bg, rgba(0, 0, 0, 0.4))\",\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tmaxWidth: 440,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby=\"payman-user-action-message\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl shadow-2xl\",\n\t\t\t\t\t\t\"payman-modal-dialog payman-modal-animate\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: 440,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tpadding: \"36px 32px 28px\",\n\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\"var(--payman-modal-dialog-bg, var(--payman-card, #ffffff))\",\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName=\"payman-modal-close-btn absolute flex items-center justify-center rounded-full border-0 bg-transparent p-0 cursor-pointer disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttop: 12,\n\t\t\t\t\t\t\tright: 12,\n\t\t\t\t\t\t\twidth: 28,\n\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={16} strokeWidth={2.5} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<p\n\t\t\t\t\t\tid=\"payman-user-action-message\"\n\t\t\t\t\t\tclassName=\"text-center leading-snug\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t\tmargin: \"0 0 20px\",\n\t\t\t\t\t\t\tpaddingRight: 24,\n\t\t\t\t\t\t\tpaddingLeft: 24,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{isPayment && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPay\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-bold tabular-nums tracking-tight\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 42,\n\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\tmargin: \"0 0 32px\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCreate Payee\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"text-center\"\n\t\t\t\t\t\t\tstyle={{ margin: \"0 0 32px\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName=\"font-bold leading-tight\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfontSize: 28,\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold uppercase\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t\t\t\topacity: 0.85,\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{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div style={{ marginBottom: 30 }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-2\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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<Loader2\n\t\t\t\t\t\t\t\t\tclassName=\"animate-spin shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-col items-center\"\n\t\t\t\t\t\tstyle={{ gap: 12, marginBottom: 32 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-resend border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"resend\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t</span>\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) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-cancel border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_REJECT}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : isPayee ? (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL_TRANSFER\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-row flex-nowrap items-center justify-center gap-1.5\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tborderTop:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tpaddingTop: 20,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-medium whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.9,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={paymanLogoMark}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: 18,\n\t\t\t\t\t\t\t\twidth: \"auto\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\tobjectFit: \"contain\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-bold whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-brand-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\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}","/**\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/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/utils/errorMessages.ts","../src/utils/sentry.ts","../src/components/ResetSessionConfirmModal/index.tsx","../src/components/v2/ActionTooltipV2.tsx","../src/components/v2/UserMessageV2.tsx","../src/components/v2/MarkdownImageV2.tsx","../src/components/v2/MarkdownRendererV2.tsx","../src/components/v2/PaymanMark.tsx","../src/components/v2/ThinkingBlockV2.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.tsx","../src/components/v2/OtpInputV2.tsx","../src/components/v2/VerificationCardV2.tsx","../src/components/v2/MessageListV2.tsx","../src/components/v2/ChatInputV2.tsx","../src/components/v2/ImageLightboxV2.tsx","../src/hooks/useSessionHistory.ts","../src/components/SessionHistorySidebar/index.tsx","../src/components/PaymanChat/index.tsx","../src/components/ChatHeader/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/FloatingChat/index.tsx","../src/utils/relativeTime.ts"],"names":["createContext","useContext","twMerge","clsx","Sentry","init","Sentry2","useCallback","useEffect","jsx","AnimatePresence","jsxs","motion","useState","useRef","createPortal","Check","AlertCircle","Fragment","Copy","Pencil","RotateCcw","useMemo","Loader2","ImageOff","Eye","ReactMarkdown","remarkGfm","interpolate","ChevronRight","buildFormattedThinking","conflictErrorMessage","WifiOff","SearchCode","ShieldCheck","forwardRef","MessageListV2","useImperativeHandle","ArrowDown","ChatInputV2","X","Plus","ImagePlus","Paperclip","Mic","ArrowUp","Download","listSessions","PanelBottomOpen","useReducedMotion","PanelLeftOpen","PanelLeftClose","MessageSquare","MOBILE_BREAKPOINT","PaymanChat","useChatV2","useVoice","EmptyState","Menu","DEFAULT_MAX_LENGTH","MAX_SUPPORTED_LENGTH","AUTO_FOCUS_DELAY_MS","MessageCircle","ChevronDown"],"mappings":"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","file":"index.js","sourcesContent":["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","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","/**\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","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 * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { useCallback, useEffect } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nexport type ResetSessionConfirmModalProps = {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n};\n\nexport function ResetSessionConfirmModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n}: ResetSessionConfirmModalProps) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, isOpen]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-reset-session-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-reset-session-modal-overlay\" />\n\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-reset-session-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-reset-session-title\"\n\t\t\t\t\t\taria-describedby=\"payman-reset-session-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-copy\">\n\t\t\t\t\t\t\t<p className=\"payman-reset-session-modal-eyebrow\">\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-title\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-title\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tStart a new session?\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-description\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis will clear the current conversation and start fresh.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\ntype ActionTooltipV2Props = {\n\tlabel: string;\n\tchildren: ReactNode;\n};\n\nexport function ActionTooltipV2({ label, children }: ActionTooltipV2Props) {\n\treturn (\n\t\t<div className=\"payman-v2-tooltip\">\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\" className=\"payman-v2-tooltip-content\">\n\t\t\t\t<div className=\"payman-v2-tooltip-text\">\n\t\t\t\t\t{label}\n\t\t\t\t\t<div className=\"payman-v2-tooltip-arrow\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tCopy,\n\tPencil,\n\tRotateCcw,\n} from \"lucide-react\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport { getConflictErrorMessage } from \"../../utils/errorMessages\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n\tactions?: UserMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nfunction formatMessageTime(timestamp: string): string {\n\tconst value = new Date(timestamp);\n\tif (Number.isNaN(value.getTime())) return \"\";\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(value);\n}\n\nexport function UserMessageV2({\n\tmessage,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n\tactions,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = 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\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(message.content);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst timestamp = formatMessageTime(message.timestamp);\n\tconst hasVisibleActions =\n\t\tshowCopyAction || (showEditAction && !!onEdit) || (showRetryAction && !!onRetry);\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ borderRadius: 9999 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check className=\"h-4 w-4\" style={{ color: \"#059669\" }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-user-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-user-msg-group\">\n\t\t\t\t\t<div className=\"payman-v2-user-msg-bubble\">\n\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">{message.content}</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{message.isError && message.errorDetails && (() => {\n\t\t\t\t\t\tconst resolvedError =\n\t\t\t\t\t\t\tgetConflictErrorMessage(message.errorDetails) ??\n\t\t\t\t\t\t\tmessage.errorDetails;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"payman-v2-user-msg-error\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5 shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: \"rgba(239, 68, 68, 0.7)\", marginTop: \"2px\" }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedError}\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);\n\t\t\t\t\t})()}\n\n\t\t\t\t\t{(timestamp || hasVisibleActions) && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-actions\">\n\t\t\t\t\t\t\t{timestamp ? (\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-timestamp\">{timestamp}</span>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<Copy className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showEditAction && onEdit && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Edit\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onEdit(message.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pencil className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showRetryAction && onRetry && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Retry\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(message.id)}\n\t\t\t\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Retry message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { Loader2, ImageOff, Eye } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nexport type MarkdownImageV2Props = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nconst frameStyle: CSSProperties = {\n\twidth: \"min(100%, 32rem)\",\n\tmaxWidth: \"100%\",\n};\n\nconst imgStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\theight: \"auto\",\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"22rem\",\n\tobjectFit: \"contain\",\n};\n\nexport function MarkdownImageV2({\n\tsrc,\n\talt,\n\tisResolving = false,\n\tonImageClick,\n}: MarkdownImageV2Props) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst sentinelRef = useRef<HTMLSpanElement>(null);\n\n\tconst isUnresolvedRag = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src],\n\t);\n\tconst isResolvingRag = Boolean(isResolving && isUnresolvedRag);\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetRetryCount(0);\n\t\t// Don't reset visibility — if the element is already in the viewport\n\t\t// (e.g. after RAG URL → resolved URL swap), keep loading immediately\n\t\t// instead of flashing the \"Image\" placeholder for a frame.\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst el = sentinelRef.current;\n\t\tif (!el || !src) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"200px\" },\n\t\t);\n\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [src]);\n\n\tif (!src) return null;\n\n\tif (isResolvingRag) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn(\"payman-v2-md-image\", \"payman-v2-md-image-resolving\")}\n\t\t\t>\n\t\t\t\t<span className=\"payman-v2-md-image-resolving-inner\">\n\t\t\t\t\t<Loader2\n\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t/>\n\t\t\t\t\t<span>Loading image</span>\n\t\t\t\t\t<span>Reference image</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn (\n\t\t\t<span className={cn(\"payman-v2-md-image\", \"payman-v2-md-image-error\")}>\n\t\t\t\t<ImageOff aria-hidden />\n\t\t\t\t<span>Unable to load image</span>\n\t\t\t\t{alt ? <span>{alt}</span> : null}\n\t\t\t\t{retryCount < 3 ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-error-retry\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetRetryCount((c) => c + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t);\n\t}\n\n\tconst imgSrc =\n\t\tretryCount > 0\n\t\t\t? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_r=${retryCount}`\n\t\t\t: src;\n\n\treturn (\n\t\t<span ref={sentinelRef} className=\"payman-v2-md-image\">\n\t\t\t{isVisible ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"payman-v2-md-image-button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded && src) onImageClick?.(src, alt || \"Image\");\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...frameStyle,\n\t\t\t\t\t\tminHeight: isLoaded ? 0 : \"10rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{!isLoaded && (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-loading\">\n\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\tstyle={{ animation: \"payman-v2-spin 0.7s linear infinite\" }}\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Loading image…</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={imgSrc}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-img\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...imgStyle,\n\t\t\t\t\t\t\topacity: isLoaded ? 1 : 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{isLoaded ? (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay\" aria-hidden>\n\t\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay-icon\">\n\t\t\t\t\t\t\t\t<Eye />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"payman-v2-md-image-placeholder\"\n\t\t\t\t\tstyle={{ ...frameStyle, minHeight: \"10rem\" }}\n\t\t\t\t>\n\t\t\t\t\t<span>Image</span>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { Components } from \"react-markdown\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownImageV2 } from \"./MarkdownImageV2\";\n\nexport type MarkdownRendererV2Props = {\n\tcontent: string;\n\tisStreaming?: boolean;\n\tisResolvingImages?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nfunction buildComponents(\n\tonImageClick?: (src: string, alt: string) => void,\n\tisResolvingImages?: boolean,\n): Components {\n\treturn {\n\t\tp: ({ children }) => <p>{children}</p>,\n\t\tcode: ({ children }) => <code>{children}</code>,\n\t\tpre: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-pre\">\n\t\t\t\t<pre>{children}</pre>\n\t\t\t</div>\n\t\t),\n\t\tul: ({ children }) => <ul>{children}</ul>,\n\t\tol: ({ children }) => <ol>{children}</ol>,\n\t\tli: ({ children }) => <li>{children}</li>,\n\t\th1: ({ children }) => <h1>{children}</h1>,\n\t\th2: ({ children }) => <h2>{children}</h2>,\n\t\th3: ({ children }) => <h3>{children}</h3>,\n\t\tstrong: ({ children }) => <strong>{children}</strong>,\n\t\tem: ({ children }) => <em>{children}</em>,\n\t\tblockquote: ({ children }) => <blockquote>{children}</blockquote>,\n\t\thr: () => <hr />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImageV2\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={isResolvingImages}\n\t\t\t\tonImageClick={onImageClick}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-table-wrapper\">\n\t\t\t\t<table className=\"payman-v2-markdown-table\">{children}</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-v2-markdown-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"payman-v2-markdown-tbody\">{children}</tbody>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"payman-v2-markdown-th\">{children}</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"payman-v2-markdown-td\">{children}</td>\n\t\t),\n\t};\n}\n\nexport function MarkdownRendererV2({\n\tcontent,\n\tisStreaming,\n\tisResolvingImages,\n\tonImageClick,\n}: MarkdownRendererV2Props) {\n\tconst components = useMemo(\n\t\t() => buildComponents(onImageClick, isResolvingImages),\n\t\t[onImageClick, isResolvingImages],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-v2-markdown\",\n\t\t\t\tisStreaming && \"payman-v2-streaming-cursor\",\n\t\t\t)}\n\t\t>\n\t\t\t<ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\nimport { interpolate } from \"flubber\";\n\n// Exact Payman brand logo path (viewBox 0 0 190 232).\nconst PAYMAN_PATH =\n\t\"M174.005 38.1616C159.62 18.4068 138.406 5.43014 114.263 1.62485C90.1187 -2.18045 65.9302 3.63155 46.1599 17.9906C21.9565 35.5752 6.06885 61.5137 1.39776 91.0344C-3.27333 120.555 3.85231 150.135 21.4358 174.305C43.0508 204.004 74.9451 223.506 111.243 229.244L122.415 231.013V171.273C121.968 171.273 121.522 171.302 121.076 171.302C116.955 171.302 112.82 170.975 108.684 170.321C106.795 170.024 104.92 169.638 103.076 169.207V207.839C76.5368 201.031 53.4045 185.364 37.0706 162.934C22.5218 142.941 16.6309 118.474 20.4838 94.037C24.3515 69.6148 37.502 48.1505 57.5103 33.5983C73.1004 22.2715 92.1865 17.6784 111.228 20.6811C130.269 23.6837 147.005 33.9253 158.355 49.5032C167.117 61.5583 170.673 76.2889 168.337 91.0047C166.016 105.72 158.087 118.653 146.038 127.408C136.815 134.112 125.524 136.832 114.248 135.048C102.972 133.264 93.079 127.214 86.355 117.984C81.2823 111.027 79.2443 102.51 80.5831 94.0073C81.922 85.5049 86.5038 78.0429 93.4658 72.9741C98.6129 69.2283 104.92 67.7121 111.213 68.7081C117.506 69.704 123.039 73.0782 126.788 78.2362C129.481 81.9374 130.567 86.4711 129.853 90.9898C129.139 95.5086 126.699 99.4774 122.995 102.183H146.648C147.719 99.5815 148.492 96.8464 148.939 94.0073C150.456 84.39 148.135 74.743 142.408 66.8797C135.625 57.5597 125.613 51.4207 114.218 49.637C102.823 47.8384 91.4129 50.5734 82.0707 57.3665C70.9285 65.4676 63.6095 77.4037 61.4525 91.0047C59.2955 104.606 62.5831 118.221 70.6905 129.355C80.4344 142.748 94.8195 151.548 111.198 154.134C127.577 156.72 143.97 152.781 157.373 143.03C173.603 131.228 184.269 113.822 187.408 94.0073C190.547 74.193 185.757 54.349 173.96 38.117L174.005 38.1616Z\";\n\n// Circle centred on the Payman logo's viewBox midpoint (95, 116) with radius 80,\n// expressed as four cubic-bezier segments so flubber interpolates smoothly.\nconst CIRCLE_PATH =\n\t\"M95 36C139.183 36 175 71.817 175 116C175 160.183 139.183 196 95 196C50.817 196 15 160.183 15 116C15 71.817 50.817 36 95 36Z\";\n\n// Eased cubic-in-out for the morph so edges ease at rest and middle is quick.\nfunction easeInOut(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\n\ntype Phase =\n\t| { kind: \"hold-logo\" }\n\t| { kind: \"morph\"; direction: 1 | -1; progress: number }\n\t| { kind: \"hold-circle\"; progress: number };\n\nconst TIMINGS = {\n\t// Total loop cycle = sum of all phases (ms)\n\tholdLogoMs: 900,\n\tmorphToCircleMs: 550,\n\tholdCircleMs: 1100,\n\tmorphToLogoMs: 550,\n};\n\nconst TOTAL_CYCLE =\n\tTIMINGS.holdLogoMs +\n\tTIMINGS.morphToCircleMs +\n\tTIMINGS.holdCircleMs +\n\tTIMINGS.morphToLogoMs;\n\nfunction phaseAtTime(elapsed: number): Phase {\n\tlet t = elapsed % TOTAL_CYCLE;\n\n\tif (t < TIMINGS.holdLogoMs) {\n\t\treturn { kind: \"hold-logo\" };\n\t}\n\tt -= TIMINGS.holdLogoMs;\n\n\tif (t < TIMINGS.morphToCircleMs) {\n\t\treturn {\n\t\t\tkind: \"morph\",\n\t\t\tdirection: 1,\n\t\t\tprogress: easeInOut(t / TIMINGS.morphToCircleMs),\n\t\t};\n\t}\n\tt -= TIMINGS.morphToCircleMs;\n\n\tif (t < TIMINGS.holdCircleMs) {\n\t\treturn { kind: \"hold-circle\", progress: t / TIMINGS.holdCircleMs };\n\t}\n\tt -= TIMINGS.holdCircleMs;\n\n\treturn {\n\t\tkind: \"morph\",\n\t\tdirection: -1,\n\t\tprogress: easeInOut(t / TIMINGS.morphToLogoMs),\n\t};\n}\n\n// Ring stroke geometry (circumference of a circle at r=65 ≈ 408.4).\nconst RING_CX = 95;\nconst RING_CY = 116;\nconst RING_R = 65;\nconst RING_STROKE_WIDTH = 22;\nconst RING_CIRCUMFERENCE = 2 * Math.PI * RING_R;\nconst RING_ARC_FRACTION = 0.3; // 30% of the ring is the visible progressing arc.\n\n// Flubber's `interpolate` is expensive at fine `maxSegmentLength`. Cache the\n// resulting interpolators at module scope (shared across every mount) and\n// build them lazily off the render-critical path so the first assistant\n// message doesn't block the main thread while \"Working on it…\" animates in.\ntype Interpolators = {\n\tforward: (t: number) => string;\n\tbackward: (t: number) => string;\n};\nlet cachedInterpolators: Interpolators | null = null;\nlet pendingInterpolators: Promise<Interpolators> | null = null;\n\nfunction buildInterpolators(): Interpolators {\n\tconst opts = { maxSegmentLength: 8 };\n\treturn {\n\t\tforward: interpolate(PAYMAN_PATH, CIRCLE_PATH, opts),\n\t\tbackward: interpolate(CIRCLE_PATH, PAYMAN_PATH, opts),\n\t};\n}\n\nfunction loadInterpolatorsAsync(): Promise<Interpolators> {\n\tif (cachedInterpolators) return Promise.resolve(cachedInterpolators);\n\tif (pendingInterpolators) return pendingInterpolators;\n\n\tpendingInterpolators = new Promise<Interpolators>((resolve) => {\n\t\tconst run = () => {\n\t\t\tcachedInterpolators = buildInterpolators();\n\t\t\tresolve(cachedInterpolators);\n\t\t};\n\t\tconst ric = (\n\t\t\tglobalThis as typeof globalThis & {\n\t\t\t\trequestIdleCallback?: (cb: () => void, opts?: { timeout: number }) => number;\n\t\t\t}\n\t\t).requestIdleCallback;\n\t\tif (typeof ric === \"function\") {\n\t\t\tric(run, { timeout: 200 });\n\t\t} else {\n\t\t\tsetTimeout(run, 0);\n\t\t}\n\t});\n\treturn pendingInterpolators;\n}\n\nexport function PaymanMark() {\n\tconst pathRef = useRef<SVGPathElement | null>(null);\n\tconst ringGroupRef = useRef<SVGGElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst reduced = window.matchMedia(\n\t\t\t\"(prefers-reduced-motion: reduce)\",\n\t\t).matches;\n\t\tif (reduced) {\n\t\t\tpathRef.current?.setAttribute(\"d\", PAYMAN_PATH);\n\t\t\tpathRef.current?.setAttribute(\"fill-opacity\", \"1\");\n\t\t\tringGroupRef.current?.setAttribute(\"opacity\", \"0\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet raf = 0;\n\t\tlet cancelled = false;\n\t\tconst start = performance.now();\n\t\tlet interpolators = cachedInterpolators;\n\n\t\tconst tick = (now: number) => {\n\t\t\tconst elapsed = now - start;\n\t\t\tconst phase = phaseAtTime(elapsed);\n\n\t\t\tlet d: string;\n\t\t\tlet fillOpacity = 1;\n\t\t\tlet ringOpacity = 0;\n\t\t\t// The ring's continuous spin is based on absolute elapsed time so it\n\t\t\t// stays smooth whether visible or not.\n\t\t\tconst spin = (elapsed / 900) * 360;\n\n\t\t\tswitch (phase.kind) {\n\t\t\t\tcase \"hold-logo\":\n\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"morph\": {\n\t\t\t\t\tif (!interpolators) {\n\t\t\t\t\t\t// Interpolators aren't ready yet — hold the logo instead of\n\t\t\t\t\t\t// blocking the frame to compute them.\n\t\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\td =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? interpolators.forward(phase.progress)\n\t\t\t\t\t\t\t: interpolators.backward(phase.progress);\n\t\t\t\t\t// `p` measures how \"circle-like\" the current shape is (0 = P, 1 = circle).\n\t\t\t\t\tconst p =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? phase.progress\n\t\t\t\t\t\t\t: 1 - phase.progress;\n\t\t\t\t\t// Fill holds until the shape is mostly a circle, then fades out.\n\t\t\t\t\tfillOpacity = p < 0.6 ? 1 : 1 - (p - 0.6) / 0.4;\n\t\t\t\t\t// Ring fades in once the shape is past halfway to circle.\n\t\t\t\t\tringOpacity = p < 0.55 ? 0 : (p - 0.55) / 0.45;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"hold-circle\":\n\t\t\t\t\td = CIRCLE_PATH;\n\t\t\t\t\tfillOpacity = 0;\n\t\t\t\t\tringOpacity = 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (pathRef.current) {\n\t\t\t\tpathRef.current.setAttribute(\"d\", d);\n\t\t\t\tpathRef.current.setAttribute(\"fill-opacity\", fillOpacity.toFixed(3));\n\t\t\t}\n\t\t\tif (ringGroupRef.current) {\n\t\t\t\tringGroupRef.current.setAttribute(\"opacity\", ringOpacity.toFixed(3));\n\t\t\t\tringGroupRef.current.setAttribute(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`rotate(${spin.toFixed(2)} ${RING_CX} ${RING_CY})`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\traf = requestAnimationFrame(tick);\n\t\t};\n\n\t\traf = requestAnimationFrame(tick);\n\n\t\tif (!interpolators) {\n\t\t\tvoid loadInterpolatorsAsync().then((result) => {\n\t\t\t\tif (!cancelled) interpolators = result;\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tcancelAnimationFrame(raf);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tclassName=\"payman-v2-thinking-mark\"\n\t\t\tviewBox=\"0 0 190 232\"\n\t\t\taria-hidden\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t{/* Morphing filled shape: Payman P ↔ circle. */}\n\t\t\t<path ref={pathRef} d={PAYMAN_PATH} fill=\"currentColor\" />\n\n\t\t\t{/* Progressing ring that appears once the shape reaches circle. */}\n\t\t\t<g ref={ringGroupRef} opacity={0}>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeOpacity={0.16}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${RING_CIRCUMFERENCE * RING_ARC_FRACTION} ${RING_CIRCUMFERENCE}`}\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { PaymanMark } from \"./PaymanMark\";\n\nexport const CURSOR_MESSAGES = [\n\t\"Analyzing\",\n\t\"Processing\",\n\t\"Calculating\",\n\t\"Reviewing\",\n\t\"Verifying\",\n\t\"Assessing\",\n\t\"Evaluating\",\n\t\"Checking\",\n\t\"Planning\",\n\t\"Working\",\n\t\"Updating\",\n\t\"Validating\",\n\t\"Monitoring\",\n\t\"Optimizing\",\n\t\"Reconciling\",\n\t\"Forecasting\",\n\t\"Inspecting\",\n\t\"Organizing\",\n\t\"Sorting\",\n\t\"Scanning\",\n\t\"Balancing\",\n\t\"Summarizing\",\n\t\"Predicting\",\n\t\"Comparing\",\n\t\"Tracking\",\n\t\"Adjusting\",\n\t\"Examining\",\n\t\"Mapping\",\n\t\"Modeling\",\n\t\"Reporting\",\n\t\"Confirming\",\n] as const;\n\nexport const FINAL_CURSOR_MESSAGE = \"Finishing up\";\n\nfunction getMaxDuration(\n\t...values: Array<number | null | undefined>\n): number | undefined {\n\tconst defined = values.filter(\n\t\t(value): value is number =>\n\t\t\ttypeof value === \"number\" && Number.isFinite(value),\n\t);\n\treturn defined.length > 0 ? Math.max(...defined) : undefined;\n}\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 parseThinkingContent(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\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({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✗ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({ type: \"detail\", text: line });\n\t}\n\treturn out;\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\ntype AnimatedSecondsProps = {\n\tvalue: number;\n\tclassName?: string;\n\tariaLabel: string;\n};\n\nfunction AnimatedSeconds({\n\tvalue,\n\tclassName,\n\tariaLabel,\n}: AnimatedSecondsProps) {\n\treturn (\n\t\t<span className={cn(\"payman-v2-thinking-seconds\", className)} aria-label={ariaLabel}>\n\t\t\t<span className=\"payman-v2-thinking-seconds-track\" aria-hidden=\"true\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tclassName=\"payman-v2-thinking-seconds-value\"\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n\t\t\t\t\t\texit={{ opacity: 0, y: -6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.22, 1, 0.36, 1] }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{formatDuration(value)}\n\t\t\t\t\t</motion.span>\n\t\t\t\t</AnimatePresence>\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nexport type ThinkingBlockV2Props = {\n\tcontent: string;\n\tisStreaming: boolean;\n\t/** Final duration in seconds (shown after streaming ends). */\n\tdurationSec?: number;\n\t/** Epoch ms when the request was submitted — used for the live counter. */\n\tstartedAt?: number;\n};\n\nexport function ThinkingBlockV2({\n\tcontent,\n\tisStreaming,\n\tdurationSec,\n\tstartedAt,\n}: ThinkingBlockV2Props) {\n\tconst [open, setOpen] = useState(true);\n\tconst [cursorIdx, setCursorIdx] = useState(0);\n\tconst [elapsedSec, setElapsedSec] = useState(() =>\n\t\t// Only seed from startedAt when actively streaming — otherwise (e.g.\n\t\t// after a hot-reload on a completed message) Date.now()-startedAt would\n\t\t// be the time since completion, not the actual thinking duration.\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\t// Mirror of elapsedSec as a ref so the freeze effect can read the latest\n\t// value without needing it in its dependency array.\n\tconst elapsedSecRef = useRef(elapsedSec);\n\tconst frozenSecRef = useRef<number | null>(null);\n\tconst prevStreaming = useRef(isStreaming);\n\n\tconst parsed = useMemo(() => parseThinkingContent(content), [content]);\n\n\tconst isFinalizingPhase = useMemo(() => {\n\t\tconst statements = parsed.filter(\n\t\t\t(l): l is Extract<ThinkingLine, { type: \"statement\" }> =>\n\t\t\t\tl.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\tsetOpen(false);\n\t\t\t// Capture the actual last timer value via the ref — NOT recomputed\n\t\t\t// from startedAt, which may have changed to the completion timestamp\n\t\t\t// by the time this effect fires.\n\t\t\tfrozenSecRef.current = elapsedSecRef.current;\n\t\t}\n\t\tprevStreaming.current = isStreaming;\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || !startedAt) return;\n\t\t// `active` flag ensures any interval tick that fires after cleanup\n\t\t// (React doesn't guarantee synchronous teardown) is a no-op.\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 = window.setInterval(tick, 1000);\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || isFinalizingPhase) return;\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetCursorIdx((i) => (i + 1) % CURSOR_MESSAGES.length);\n\t\t}, 4000);\n\t\treturn () => window.clearInterval(id);\n\t}, [isStreaming, isFinalizingPhase]);\n\n\t// For historical messages (never streamed in this session), use the persisted\n\t// durationSec. For live completions, prefer the frozen session timer value.\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 = getMaxDuration(\n\t\tfrozenSecRef.current,\n\t\tjustStoppedSec,\n\t\t// Only fall back to durationSec when the timer never ran this session\n\t\t// (i.e. the message was already complete when this component mounted).\n\t\tfrozenSecRef.current == null && !prevStreaming.current ? durationSec : undefined,\n\t);\n\n\tconst headerLabel = isStreaming ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t<span className=\"payman-v2-thinking-shimmer\">Working on it…</span>\n\t\t\t{startedAt !== undefined && (\n\t\t\t\t<AnimatedSeconds\n\t\t\t\t\tclassName=\"payman-v2-thinking-timer\"\n\t\t\t\t\tariaLabel={`Elapsed ${formatDuration(elapsedSec)}`}\n\t\t\t\t\tvalue={elapsedSec}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t) : finalSec != null && finalSec > 0 ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t\t<span>Thought for</span>\n\t\t\t\t<AnimatedSeconds\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-timer\",\n\t\t\t\t\t\t\"payman-v2-thinking-duration\",\n\t\t\t\t\t)}\n\t\t\t\t\tariaLabel={`Thought for ${formatDuration(finalSec)}`}\n\t\t\t\t\tvalue={finalSec}\n\t\t\t\t/>\n\t\t\t</span>\n\t) : (\n\t\t<span>Thought</span>\n\t);\n\n\tconst cursorKey = isFinalizingPhase ? \"finalizing\" : String(cursorIdx);\n\tconst cursorText = isFinalizingPhase\n\t\t? FINAL_CURSOR_MESSAGE\n\t\t: CURSOR_MESSAGES[cursorIdx];\n\n\treturn (\n\t\t<div className=\"payman-v2-thinking\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-thinking-toggle\"\n\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\taria-expanded={open}\n\t\t\t>\n\t\t\t\t<ChevronRight\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-chevron\",\n\t\t\t\t\t\topen && \"payman-v2-thinking-chevron-open\",\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t/>\n\t\t\t\t{headerLabel}\n\t\t\t</button>\n\n\t\t\t<div className=\"payman-v2-thinking-border\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{open && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"thinking-content\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-content\"\n\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{parsed.map((item, i) => {\n\t\t\t\t\t\t\t\t\tif (item.type === \"statement\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-statement\"\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{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\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\tif (item.type === \"detail\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-detail\"\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{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\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\treturn (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-thinking-status\",\n\t\t\t\t\t\t\t\t\t\t\t\titem.variant === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-thinking-status-success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-thinking-status-error\",\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{item.text}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isStreaming && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor\"\n\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<PaymanMark />\n\t\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\tkey={cursorKey}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-label payman-v2-thinking-shimmer\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 2 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -2 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.24, ease: [0.4, 0, 0.2, 1] }}\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{cursorText}\n\t\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</div>\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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tCopy,\n\tCheck,\n\tAlertCircle,\n\tWifiOff,\n\tSearchCode,\n} from \"lucide-react\";\nimport { buildFormattedThinking } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { MarkdownRendererV2 } from \"./MarkdownRendererV2\";\nimport { ThinkingBlockV2 } from \"./ThinkingBlockV2\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { useTypingEffect, THINKING_SPEED, RESPONSE_SPEED } from \"./useTypingEffect\";\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonImageClick?: (src: string, alt: string) => void;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\tactions?: AssistantMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nconst INITIAL_THINKING_PLACEHOLDER = [\n\t\"**Getting things ready**\",\n\t\"Putting things together\",\n].join(\"\\n\");\n\n/**\n * Get the formatted thinking text for v2 display.\n * Uses the pre-computed formattedThinkingText from the TS SDK when available,\n * falls back to building it from steps + allThinkingText.\n */\nfunction getFormattedThinking(\n\tmessage: MessageDisplay,\n\tincludeInitialPlaceholder = false,\n): string {\n\tconst plainThinkingText =\n\t\tmessage.allThinkingText || message.activeThinkingText || \"\";\n\n\tconst baseText = message.formattedThinkingText ||\n\t\tbuildFormattedThinking(message.steps, plainThinkingText);\n\n\tif (includeInitialPlaceholder && baseText) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER + \"\\n\" + baseText;\n\t}\n\tif (includeInitialPlaceholder) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER;\n\t}\n\n\treturn baseText;\n}\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonImageClick,\n\tonExecutionTraceClick,\n\tactions,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showTraceAction =\n\t\t(actions?.trace ?? true) && !!onExecutionTraceClick;\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\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw = message.isStreaming && !isHistorical\n\t\t\t? (message.streamingContent || message.content)\n\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\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 = !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 resolvedErrorText = (() => {\n\t\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\t\tif (conflictErrorMessage) {\n\t\t\treturn conflictErrorMessage;\n\t\t}\n\t\tif (\n\t\t\tisFriendlyWorkflowError(message.errorDetails) &&\n\t\t\t!message.errorDetails\n\t\t) {\n\t\t\treturn \"Oops, something went wrong. Please try again.\";\n\t\t}\n\t\treturn message.errorDetails;\n\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\t// Total wall-clock time from when the user submitted (assistant message\n\t// was created) until the last step arrived. Falls back to step-span if\n\t// the message timestamp isn't available.\n\tconst thinkingDuration = (() => {\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(\n\t\t\t\t0,\n\t\t\t\tMath.round((last.timestamp - requestStartedAt) / 1000),\n\t\t\t);\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})();\n\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isConflictError = Boolean(conflictErrorMessage);\n\n\t// For 409 conflicts, render only the parsed backend message — never the\n\t// raw `ops`/JSON payload, a generic \"Oops…\" fallback, or any partial\n\t// streamed content that arrived before the conflict fired.\n\tif (isConflictError) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t{conflictErrorMessage}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (message.isError && !displayContent && !hasThinkingContent) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (showLegacyThinkingPhase) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<p className=\"payman-v2-assistant-msg-thinking-only payman-v2-thinking-shimmer\">\n\t\t\t\t\tWorking on it…\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(displayContent);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst handleTrace = () => {\n\t\tonExecutionTraceClick?.({\n\t\t\tmessage,\n\t\t\ttracingData: message.tracingData,\n\t\t\texecutionId: message.executionId,\n\t\t});\n\t};\n\n\tconst hasPartialError = message.isError && displayContent && !isConflictError;\n\tconst isDone =\n\t\t!message.isStreaming &&\n\t\tdisplayContent &&\n\t\t!hasPartialError &&\n\t\t!isResponseTyping;\n\tconst hasVisibleDoneActions =\n\t\tshowCopyAction ||\n\t\tshowTraceAction;\n\tconst isCancelled = message.isCancelled;\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ borderRadius: 9999 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t{showThinkingBlock && (\n\t\t\t\t\t<ThinkingBlockV2\n\t\t\t\t\t\tcontent={thinkingContent}\n\t\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\t\tdurationSec={message.thinkingDurationSec ?? thinkingDuration}\n\t\t\t\t\t\tstartedAt={requestStartedAt}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"payman-v2-assistant-msg-content-area\">\n\t\t\t\t\t{displayContent ? (\n\t\t\t\t\t\t<MarkdownRendererV2\n\t\t\t\t\t\t\tcontent={displayContent}\n\t\t\t\t\t\t\tisStreaming={(message.isStreaming && !isCancelled) || isResponseTyping}\n\t\t\t\t\t\t\tisResolvingImages={message.isResolvingImages}\n\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : !isThinkingStreaming && !hasThinkingContent ? (\n\t\t\t\t\t\t<span className=\"payman-v2-assistant-msg-placeholder\">...</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t{isCancelled && message.isStreaming && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-paused\">\n\t\t\t\t\t\t<WifiOff\n\t\t\t\t\t\t\tstyle={{ width: 14, height: 14, color: \"rgba(217, 119, 6, 0.7)\", flexShrink: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-paused-text\">\n\t\t\t\t\t\t\tConnection slow - resuming…\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasPartialError && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-partial-error\">\n\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{isDone && hasVisibleDoneActions && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-actions\">\n\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tcopied && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Copy\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t<Check style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Copy style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTraceAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Trace\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleTrace}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-action-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"Trace response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SearchCode style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type OtpInputV2Props = {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tmaxLength?: number;\n\tdisabled?: boolean;\n\terror?: boolean;\n};\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInputV2({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputV2Props) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && (maxLength as number) > 0\n\t\t\t? Math.min(maxLength as number, 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\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [disabled]);\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, char: string) => {\n\t\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\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\treturn;\n\t\t}\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div className={cn(\"payman-v2-otp\", error && \"payman-v2-shake\")}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-otp-digit\",\n\t\t\t\t\t\tdigit && \"payman-v2-otp-digit-filled\",\n\t\t\t\t\t\terror && \"payman-v2-otp-digit-error\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ShieldCheck } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { OtpInputV2 } from \"./OtpInputV2\";\n\nexport type VerificationActionV2 = {\n\ttype: string;\n\tmessage: string;\n\tamount?: string;\n\tpayeeName?: string;\n};\n\nexport type VerificationStatusV2 =\n\t| \"pending\"\n\t| \"verifying\"\n\t| \"approved\"\n\t| \"rejected\"\n\t| \"error\";\n\nexport type VerificationCardV2Props = {\n\tmessageId: string;\n\taction: VerificationActionV2;\n\tstatus: VerificationStatusV2;\n\tclearOtpTrigger?: number;\n\tonApprove: (messageId: string, otp: string) => Promise<void>;\n\tonReject: (messageId: string) => Promise<void>;\n\tonResend: (messageId: string) => Promise<void>;\n};\n\nconst RESEND_COOLDOWN_S = 30;\nconst OTP_LEN = 6;\n\nexport function VerificationCardV2({\n\tmessageId,\n\taction,\n\tstatus,\n\tclearOtpTrigger = 0,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: VerificationCardV2Props) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpErrored, setOtpErrored] = useState(false);\n\tconst [resendSec, setResendSec] = useState(0);\n\tconst [localPending, setLocalPending] = useState(false);\n\tconst lastSubmittedRef = useRef<string | null>(null);\n\tconst resendTimerRef = useRef<number | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger <= 0) return;\n\t\tsetOtpErrored(true);\n\t\tconst t = window.setTimeout(() => {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpErrored(false);\n\t\t\tsetLocalPending(false);\n\t\t\tlastSubmittedRef.current = null;\n\t\t}, 600);\n\t\treturn () => window.clearTimeout(t);\n\t}, [clearOtpTrigger]);\n\n\tuseEffect(() => {\n\t\tif (otp.length < OTP_LEN) {\n\t\t\tlastSubmittedRef.current = null;\n\t\t}\n\t}, [otp]);\n\n\tuseEffect(() => {\n\t\tif (status !== \"pending\") {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [status]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tsetLocalPending(true);\n\t\tvoid onApprove(messageId, otp).catch(() => {\n\t\t\tlastSubmittedRef.current = null;\n\t\t\tsetLocalPending(false);\n\t\t});\n\t}, [messageId, onApprove, otp, status]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst startResendCooldown = useCallback(() => {\n\t\tsetResendSec(RESEND_COOLDOWN_S);\n\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t}\n\t\tresendTimerRef.current = window.setInterval(() => {\n\t\t\tsetResendSec((s) => {\n\t\t\t\tif (s <= 1) {\n\t\t\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t\t\t\tresendTimerRef.current = undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn s - 1;\n\t\t\t});\n\t\t}, 1000);\n\t}, []);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendSec > 0 || status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onResend(messageId);\n\t\t\tstartResendCooldown();\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onResend, resendSec, startResendCooldown, status]);\n\n\tconst handleCancel = useCallback(async () => {\n\t\tif (status === \"verifying\" || localPending) return;\n\t\tsetLocalPending(true);\n\t\ttry {\n\t\t\tawait onReject(messageId);\n\t\t} finally {\n\t\t\tsetLocalPending(false);\n\t\t}\n\t}, [localPending, messageId, onReject, status]);\n\n\tconst busy = status === \"verifying\" || localPending;\n\n\tif (status === \"approved\" || status === \"rejected\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"payman-v2-verification\"\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 320, damping: 28 }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"payman-v2-verification-card\",\n\t\t\t\t\tbusy && \"payman-v2-verification-card-busy\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"payman-v2-verification-header\">\n\t\t\t\t\t<div className=\"payman-v2-verification-header-row\">\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"payman-v2-verification-icon\"\n\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\tstrokeWidth={1.75}\n\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-verification-title\">Verify</p>\n\t\t\t\t\t\t{action.amount != null ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-amount\">\n\t\t\t\t\t\t\t\t{action.amount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : action.payeeName ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-payee\">\n\t\t\t\t\t\t\t\t{action.payeeName}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"payman-v2-verification-description\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your phone\n\t\t\t\t\t</p>\n\t\t\t\t\t<OtpInputV2\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={OTP_LEN}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\terror={otpErrored}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"payman-v2-verification-actions\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-cancel-btn\"\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tonClick={() => void handleCancel()}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-verification-resend-link\"\n\t\t\t\tdisabled={busy || resendSec > 0}\n\t\t\t\tonClick={() => void handleResend()}\n\t\t\t>\n\t\t\t\t{resendSec > 0 ? `Resend (${resendSec}s)` : \"Resend\"}\n\t\t\t</button>\n\t\t</motion.div>\n\t);\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\nimport { VerificationCardV2 } from \"./VerificationCardV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nconst SCROLL_THRESHOLD = 100;\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n};\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisStreaming: _isStreaming = false,\n\t\t\tisLoadingSession = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\tuserAction,\n\t\t\tonApproveAction,\n\t\t\tonRejectAction,\n\t\t\tonResendAction,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollRef = useRef<HTMLDivElement>(null);\n\t\tconst scrollInnerRef = useRef<HTMLDivElement>(null);\n\t\tconst isNearBottomRef = useRef(true);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst pauseStickUntilUserMessageRef = useRef(false);\n\t\tconst followingBottomRef = useRef(true);\n\t\tconst isProgrammaticScrollRef = useRef(false);\n\n\t\tconst getDistanceFromBottom = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return 0;\n\t\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t}, []);\n\n\t\tconst scrollToBottom = useCallback(\n\t\t\t(behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t\t\t\tconst clear = () => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t};\n\t\t\t\tif (behavior === \"instant\") {\n\t\t\t\t\trequestAnimationFrame(clear);\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(clear, 400);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\t\tisNearBottomRef.current = true;\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\tsetShowScrollBtn(false);\n\t\t\t\t\tscrollToBottom(behavior);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\tconst handleScroll = useCallback(() => {\n\t\t\tconst distance = getDistanceFromBottom();\n\t\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\t\tisNearBottomRef.current = nearBottom;\n\t\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t\tif (isProgrammaticScrollRef.current) return;\n\n\t\t\tif (!nearBottom) {\n\t\t\t\tfollowingBottomRef.current = false;\n\t\t\t\tpauseStickUntilUserMessageRef.current = true;\n\t\t\t}\n\t\t}, [getDistanceFromBottom]);\n\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\tif (last?.role === \"user\") {\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t\t\t} else if (\n\t\t\t\t\t!pauseStickUntilUserMessageRef.current &&\n\t\t\t\t\tfollowingBottomRef.current\n\t\t\t\t) {\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(\"instant\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\tif (!lastMsg?.isStreaming) return;\n\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\tif (!followingBottomRef.current) return;\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t});\n\t\t});\n\n\t\tuseEffect(() => {\n\t\t\tconst inner = scrollInnerRef.current;\n\t\t\tif (!inner) return;\n\n\t\t\tconst pinIfFollowing = () => {\n\t\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\t\tif (!followingBottomRef.current) return;\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst ro = new ResizeObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tro.observe(inner);\n\t\t\treturn () => ro.disconnect();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-message-list\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tclassName=\"payman-v2-message-scroll payman-v2-scrollbar\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={scrollInnerRef}\n\t\t\t\t\t\tclassName=\"payman-v2-message-scroll-inner\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoadingSession && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-message-list-loading\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\taria-label=\"Loading conversation\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-message-list-spinner\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!isLoadingSession && messages.map((message) => (\n\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t{message.role === \"user\" ? (\n\t\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\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<AssistantMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\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</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{userAction && userAction.status !== \"approved\" && userAction.status !== \"rejected\" && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<VerificationCardV2\n\t\t\t\t\t\t\t\t\tmessageId={userAction.messageId}\n\t\t\t\t\t\t\t\t\taction={userAction.action}\n\t\t\t\t\t\t\t\t\tstatus={userAction.status}\n\t\t\t\t\t\t\t\t\tclearOtpTrigger={userAction.clearOtpTrigger}\n\t\t\t\t\t\t\t\t\tonApprove={onApproveAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonReject={onRejectAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonResend={onResendAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowDown style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tArrowUp,\n\tMic,\n\tPlus,\n\tImagePlus,\n\tPaperclip,\n\tPencil,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\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\tonCancelRecording?: () => void;\n\tonConfirmRecording?: () => void;\n\ttranscribedText?: string;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\teditingMessageId?: string | null;\n\tonClearEditing?: () => void;\n\t/** When true, the send control is hidden (e.g. during inline OTP verification). */\n\thideSendButton?: boolean;\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (message: string) => void;\n};\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tonCancel,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Reply...\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\ttranscribedText = \"\",\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\tshowAttachmentButton = true,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\teditingMessageId = null,\n\t\t\tonClearEditing,\n\t\t\thideSendButton = false,\n\t\t}: ChatInputV2Props,\n\t\tref,\n\t) {\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [showActions, setShowActions] = useState(false);\n\t\tconst [showVoiceTooltip, setShowVoiceTooltip] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst actionsRef = useRef<HTMLDivElement>(null);\n\t\tconst preRecordTextRef = useRef(\"\");\n\t\tconst voiceTooltipTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst voiceDraftSyncActiveRef = useRef(false);\n\n\t\tconst isInputLocked = disabled || isRecording;\n\t\tconst hasAttachmentOptions = showUploadImageButton || showAttachFileButton;\n\t\tconst showAttachmentMenuButton = showAttachmentButton && hasAttachmentOptions;\n\t\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\n\t\tuseEffect(() => {\n\t\t\tif (textareaRef.current) {\n\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, 200)}px`;\n\t\t\t}\n\t\t}, [value]);\n\n\t\tuseEffect(() => {\n\t\t\tif (disabled) {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tsetShowActions(false);\n\t\t\t\ttextareaRef.current?.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst frameId = requestAnimationFrame(() => textareaRef.current?.focus());\n\t\t\treturn () => cancelAnimationFrame(frameId);\n\t\t}, [disabled]);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (message: string) => {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t\tsetValue(message);\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\t\tif (!textarea || disabled) return;\n\t\t\t\t\t\ttextarea.focus();\n\t\t\t\t\t\tconst end = message.length;\n\t\t\t\t\t\ttextarea.setSelectionRange(end, end);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[disabled],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showActions) return;\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tactionsRef.current &&\n\t\t\t\t\t!actionsRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [showActions]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showAttachmentMenuButton) {\n\t\t\t\tsetShowActions(false);\n\t\t\t}\n\t\t}, [showAttachmentMenuButton]);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (!voiceDraftSyncActiveRef.current) return;\n\t\t\tconst base = preRecordTextRef.current;\n\t\t\tconst separator = base && !base.endsWith(\" \") && transcribedText ? \" \" : \"\";\n\t\t\tsetValue(`${base}${separator}${transcribedText}`);\n\t\t}, [isRecording, transcribedText]);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tif (!value.trim() || disabled) return;\n\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\tpreRecordTextRef.current = \"\";\n\t\t\tonClearEditing?.();\n\t\t\tonSend(value.trim());\n\t\t\tsetValue(\"\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (textareaRef.current) {\n\t\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\t\ttextareaRef.current.focus();\n\t\t\t\t\ttextareaRef.current.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n\t\t\t\t}\n\t\t\t});\n\t\t}, [value, disabled, onClearEditing, onSend]);\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (isStreaming || hideSendButton) return;\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t};\n\n\t\tconst handleUploadImageClick = () => {\n\t\t\tonUploadImageClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst handleAttachFileClick = () => {\n\t\t\tonAttachFileClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst hideVoiceTooltip = useCallback(() => {\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}\n\t\t\tsetShowVoiceTooltip(false);\n\t\t}, []);\n\n\t\tconst startVoiceTooltipTimer = useCallback(() => {\n\t\t\tif (isVoiceButtonDisabled || isRecording) return;\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t}\n\t\t\tvoiceTooltipTimerRef.current = setTimeout(() => {\n\t\t\t\tsetShowVoiceTooltip(true);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}, 2000);\n\t\t}, [isRecording, isVoiceButtonDisabled]);\n\n\t\tconst handleVoiceToggle = () => {\n\t\t\thideVoiceTooltip();\n\t\t\tsetShowActions(false);\n\t\t\tif (!onVoicePress || isVoiceButtonDisabled) return;\n\t\t\tif (!isRecording) {\n\t\t\t\tpreRecordTextRef.current = value;\n\t\t\t\tvoiceDraftSyncActiveRef.current = true;\n\t\t\t}\n\t\t\tonVoicePress();\n\t\t};\n\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-input-container\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-input-wrapper\",\n\t\t\t\t\t\t(isFocused || isRecording) && \"payman-v2-input-wrapper-focused\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-input-body\">\n\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t{editingMessageId && (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-banner\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-editing-banner-info\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-editing-icon-wrap\">\n\t\t\t\t\t\t\t\t\t\t\t<Pencil style={{ width: 12, height: 12 }} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-input-editing-label\">\n\t\t\t\t\t\t\t\t\t\t\tEditing message\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{onClearEditing && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-close\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Stop editing message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X style={{ width: 14, height: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: intentional — focus input on chat open\n\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tconst nextValue = e.target.value;\n\t\t\t\t\t\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\t\t\t\t\t\tsetValue(nextValue);\n\t\t\t\t\t\t\t\tif (editingMessageId && nextValue.length === 0) {\n\t\t\t\t\t\t\t\t\tonClearEditing?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\tif (disabled) e.preventDefault();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t\treadOnly={isInputLocked}\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tclassName=\"payman-v2-input-textarea\"\n\t\t\t\t\t\t\tdata-disabled={disabled ? \"true\" : \"false\"}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"payman-v2-input-controls\">\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-left\">\n\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-new-session-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showAttachmentMenuButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }} ref={actionsRef}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowActions((current) => !current)}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-attach-btn\",\n\t\t\t\t\t\t\t\t\t\t\tshowActions && \"payman-v2-input-attach-btn-active\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Attach\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 20, height: 20, strokeWidth: 2 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t\t\t{showActions && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-menu\"\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{showUploadImageButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleUploadImageClick}\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\t\t\t<ImagePlus\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\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\t\t\tUpload image\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{showAttachFileButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleAttachFileClick}\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\t\t\t<Paperclip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\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\t\t\tAttach file\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{showVoiceTooltip && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-voice-tooltip\"\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<div className=\"payman-v2-input-voice-tooltip-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tChat with your voice\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-arrow\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleVoiceToggle}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tonFocus={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonBlur={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mic-btn\",\n\t\t\t\t\t\t\t\t\t\t\tisRecording && \"payman-v2-input-mic-recording\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Mic style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-mic-indicator\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{!hideSendButton && (\n\t\t\t\t\t\t\t<div className=\"payman-v2-input-controls-right\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-send-btn\",\n\t\t\t\t\t\t\t\t\t\tsendDisabled && \"payman-v2-input-send-btn-disabled\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowUp\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.5 }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-send-icon\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<p className=\"payman-v2-input-disclaimer\">\n\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Download, Loader2, X } from \"lucide-react\";\n\nexport type ImageLightboxV2Props = {\n\tsrc: string | null;\n\talt: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightboxV2({ src, alt, onClose }: ImageLightboxV2Props) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t},\n\t\t[onClose]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [src, handleKeyDown]);\n\n\tconst handleDownload = () => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = src;\n\t\ta.download = alt.trim() ? alt : \"image\";\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{src ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={src}\n\t\t\t\t\tclassName=\"payman-v2-lightbox\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-lightbox-controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleDownload();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-lightbox-content\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={alt || \"Image preview\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-lightbox-loading\">\n\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\taria-hidden={true}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"payman-v2-spin 0.6s linear infinite\",\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<p className=\"payman-v2-lightbox-loading-text\">\n\t\t\t\t\t\t\t\t\tLoading image\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) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-lightbox-img-wrapper\">\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: isImageLoaded ? 1 : 0.92,\n\t\t\t\t\t\t\t\t\topacity: isImageLoaded ? 1 : 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\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<img\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-img\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\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 { useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type {\n\tChatAvailability,\n\tChatCallbacks,\n\tChatConfig,\n\tMessageActionsConfig,\n\tMessageDisplay,\n\tPaymanChatProps,\n\tPaymanChatRef,\n\tSessionHistoryOptions,\n\tVoiceOptions,\n} from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tisFriendlyWorkflowError,\n\tgetConflictErrorMessage,\n} from \"../../utils/errorMessages\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport {\n\tcaptureSentryError,\n\tsubscribeToCfRay,\n\ttype ChatSessionContext,\n} from \"../../utils/sentryContext\";\nimport { ResetSessionConfirmModal } from \"../ResetSessionConfirmModal\";\nimport { MessageListV2 } from \"../v2/MessageListV2\";\nimport type { MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { ChatInputV2 } from \"../v2/ChatInputV2\";\nimport type { ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { ImageLightboxV2 } from \"../v2/ImageLightboxV2\";\nimport type { VerificationStatusV2 } from \"../v2/VerificationCardV2\";\nimport {\n\tSessionHistorySidebar,\n\ttype OptimisticSessionActivity,\n} from \"../SessionHistorySidebar\";\n\n// ============================================\n// Defaults (see ref-chatref-config plan)\n// ============================================\n\nconst DEFAULT_PLACEHOLDER = \"Type your message...\";\nconst DEFAULT_EMPTY_STATE_TEXT = \"What can I help with?\";\nconst DEFAULT_AVAILABILITY: ChatAvailability = { state: \"ready\" };\nconst UNTITLED_SESSION = \"Untitled session\";\nconst MOBILE_BREAKPOINT = 640;\n\nfunction useIsMobileViewport(): 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\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n\t\tconst onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\t\tsetIsMobile(mql.matches);\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, []);\n\n\treturn isMobile;\n}\n\nfunction normalizeVoice(v: ChatConfig[\"ui\"] extends { input?: infer I } ? I extends { voice?: infer V } ? V : never : never): { enabled: boolean; options: VoiceOptions } {\n\tif (v === true) return { enabled: true, options: {} };\n\tif (v && typeof v === \"object\") return { enabled: true, options: v };\n\treturn { enabled: false, options: {} };\n}\n\nfunction normalizeAttachments(a: unknown): {\n\tshowMenu: boolean;\n\tuploadImage: boolean;\n\tattachFile: boolean;\n} {\n\tif (a === false) return { showMenu: false, uploadImage: false, attachFile: false };\n\tif (a === undefined || a === true) return { showMenu: true, uploadImage: true, attachFile: true };\n\tif (typeof a === \"object\" && a !== null) {\n\t\tconst obj = a as { uploadImage?: boolean; attachFile?: boolean };\n\t\tconst uploadImage = obj.uploadImage !== false;\n\t\tconst attachFile = obj.attachFile !== false;\n\t\treturn { showMenu: uploadImage || attachFile, uploadImage, attachFile };\n\t}\n\treturn { showMenu: true, uploadImage: true, attachFile: true };\n}\n\nfunction normalizeSessionHistory(\n\ts: ChatConfig[\"ui\"] extends { sessionHistory?: infer S } ? S : never,\n): { enabled: boolean; options: SessionHistoryOptions } {\n\tif (s === true) return { enabled: true, options: {} };\n\tif (s && typeof s === \"object\") return { enabled: true, options: s };\n\treturn { enabled: false, options: {} };\n}\n\n// ============================================\n// Sentry auto-context — now pulled from nested config paths\n// ============================================\n\nfunction useSentryChatCallbacks(\n\tcallbacks: ChatCallbacks | undefined,\n\tconfig: ChatConfig,\n): ChatCallbacks {\n\tconst sentryCtxRef = useRef<ChatSessionContext>({});\n\tconst callbacksRef = useRef(callbacks);\n\tcallbacksRef.current = callbacks;\n\n\tconst initialSessionId = config.session?.initialId;\n\tconst apiHeaders = config.api?.headers;\n\tconst workflowName = config.workflow?.name;\n\tconst sessionOwnerId = config.session?.owner?.id;\n\n\tuseEffect(() => {\n\t\tsentryCtxRef.current.workflowName = workflowName;\n\t\tsentryCtxRef.current.sessionOwnerId = sessionOwnerId;\n\t\tif (initialSessionId) {\n\t\t\tsentryCtxRef.current.sessionId = initialSessionId;\n\t\t}\n\t\tif (apiHeaders) {\n\t\t\tsentryCtxRef.current.customerId =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-id\"] ?? sentryCtxRef.current.customerId;\n\t\t\tsentryCtxRef.current.customerEmail =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-email\"] ?? sentryCtxRef.current.customerEmail;\n\t\t}\n\t}, [workflowName, sessionOwnerId, initialSessionId, apiHeaders]);\n\n\tuseEffect(() => {\n\t\tconst endpoint = config.api.streamEndpoint || \"/api/workflows/ask/stream\";\n\t\treturn subscribeToCfRay(endpoint, (cfRay) => {\n\t\t\tsentryCtxRef.current.cfRay = cfRay;\n\t\t});\n\t}, [config.api.streamEndpoint]);\n\n\treturn useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\tonMessageSent: (msg) => callbacksRef.current?.onMessageSent?.(msg),\n\t\t\tonStreamStart: () => callbacksRef.current?.onStreamStart?.(),\n\t\t\tonStreamComplete: (message: MessageDisplay) => {\n\t\t\t\tif (message.executionId) sentryCtxRef.current.executionId = message.executionId;\n\t\t\t\tif (message.sessionId) sentryCtxRef.current.sessionId = message.sessionId;\n\n\t\t\t\tconst content = message.content ?? \"\";\n\t\t\t\tconst looksLikeRawErr =\n\t\t\t\t\tcontent.length >= 10 && (content.includes(\"errorType=\") || /failed:\\s*\\{/.test(content));\n\t\t\t\tconst completedEmpty =\n\t\t\t\t\t!message.isStreaming &&\n\t\t\t\t\t!message.isCancelled &&\n\t\t\t\t\tcontent.length === 0 &&\n\t\t\t\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\t\t\t\tconst hasConflict = !!getConflictErrorMessage(message.errorDetails);\n\t\t\t\tconst hasFriendlyErr = isFriendlyWorkflowError(message.errorDetails);\n\n\t\t\t\tconst shouldCapture =\n\t\t\t\t\tmessage.isError || hasConflict || hasFriendlyErr || looksLikeRawErr || completedEmpty;\n\n\t\t\t\tif (shouldCapture) {\n\t\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\t\tcaptureSentryError(\n\t\t\t\t\t\t`Workflow error: ${message.errorDetails || content || \"Unknown error\"}`,\n\t\t\t\t\t\t{ ...sentryCtxRef.current },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcallbacksRef.current?.onStreamComplete?.(message);\n\t\t\t},\n\t\t\tonError: (error: Error) => {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\tcaptureSentryError(error, { ...sentryCtxRef.current });\n\t\t\t\tcallbacksRef.current?.onError?.(error);\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId: string) => {\n\t\t\t\tsentryCtxRef.current.sessionId = sessionId;\n\t\t\t\tcallbacksRef.current?.onSessionIdChange?.(sessionId);\n\t\t\t},\n\t\t\tonExecutionTraceClick: (data) => callbacksRef.current?.onExecutionTraceClick?.(data),\n\t\t\tonResetSession: () => callbacksRef.current?.onResetSession?.(),\n\t\t\tonUploadImageClick: () => callbacksRef.current?.onUploadImageClick?.(),\n\t\t\tonAttachFileClick: () => callbacksRef.current?.onAttachFileClick?.(),\n\t\t\tonUserActionRequired: (req) => callbacksRef.current?.onUserActionRequired?.(req),\n\t\t\tonUserActionEvent: (evType, msg) => callbacksRef.current?.onUserActionEvent?.(evType, msg),\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n}\n\n// ============================================\n// Component\n// ============================================\n\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(function PaymanChat(\n\t{\n\t\tconfig,\n\t\tcallbacks = {},\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t\tonLoadMoreMessages: _onLoadMoreMessages,\n\t\tisLoadingMoreMessages: _isLoadingMoreMessages,\n\t\thasMoreMessages: _hasMoreMessages,\n\t},\n\tref,\n) {\n\t// onLoadMoreMessages / isLoadingMoreMessages / hasMoreMessages are reserved for\n\t// future wiring through MessageListV2. Preserved on the public props shape so\n\t// downstream call-sites don't break during migration.\n\t// Sentry\n\tuseEffect(() => {\n\t\tif (config.observability?.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.observability.sentryDsn);\n\t\t}\n\t}, [config.observability?.sentryDsn]);\n\n\tconst isMobileViewport = useIsMobileViewport();\n\n\t// ============================================\n\t// UI state\n\t// ============================================\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\tconst [lightboxSrc, setLightboxSrc] = useState<string | null>(null);\n\tconst [lightboxAlt, setLightboxAlt] = useState(\"\");\n\tconst [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n\tconst [isResetSessionConfirmOpen, setIsResetSessionConfirmOpen] = useState(false);\n\tconst [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);\n\tconst [optimisticSessionActivity, setOptimisticSessionActivity] =\n\t\tuseState<OptimisticSessionActivity | null>(null);\n\t// Sessions whose stream finished within the last few seconds — drives the\n\t// brief \"done\" mark. Entries are removed automatically by a timer.\n\tconst [recentlyCompletedSessionIds, setRecentlyCompletedSessionIds] =\n\t\tuseState<ReadonlySet<string>>(() => new Set());\n\tconst recentlyCompletedTimersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n\t\tnew Map(),\n\t);\n\tconst RECENTLY_COMPLETED_DURATION_MS = 4000;\n\n\tconst clearRecentlyCompletedForSession = useCallback((sessionId: string) => {\n\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.delete(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tconst existingTimer = recentlyCompletedTimersRef.current.get(sessionId);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t\trecentlyCompletedTimersRef.current.delete(sessionId);\n\t\t}\n\t}, []);\n\n\tconst markSessionCompleted = useCallback((sessionId: string) => {\n\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(sessionId);\n\t\t\treturn next;\n\t\t});\n\t\tconst existingTimer = recentlyCompletedTimersRef.current.get(sessionId);\n\t\tif (existingTimer) clearTimeout(existingTimer);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetRecentlyCompletedSessionIds((prev) => {\n\t\t\t\tif (!prev.has(sessionId)) return prev;\n\t\t\t\tconst next = new Set(prev);\n\t\t\t\tnext.delete(sessionId);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\trecentlyCompletedTimersRef.current.delete(sessionId);\n\t\t}, RECENTLY_COMPLETED_DURATION_MS);\n\t\trecentlyCompletedTimersRef.current.set(sessionId, timer);\n\t}, []);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const timer of recentlyCompletedTimersRef.current.values()) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\trecentlyCompletedTimersRef.current.clear();\n\t\t},\n\t\t[],\n\t);\n\tconst chatInputV2Ref = useRef<ChatInputV2Handle>(null);\n\tconst messageListV2Ref = useRef<MessageListV2Handle>(null);\n\tconst resetToEmptyStateRef = useRef(false);\n\tconst latestSessionIdRef = useRef<string | undefined>(\n\t\tconfig.session?.initialId,\n\t);\n\tconst lastOptimisticSessionIdRef = useRef<string | undefined>(undefined);\n\n\tconst buildOptimisticSessionTitle = useCallback((message: string): string => {\n\t\tconst normalized = message.replace(/\\s+/g, \" \").trim();\n\t\tif (!normalized) return UNTITLED_SESSION;\n\t\treturn normalized.length <= 72\n\t\t\t? normalized\n\t\t\t: `${normalized.slice(0, 69).trimEnd()}...`;\n\t}, []);\n\n\tconst sentryCallbacks = useSentryChatCallbacks(callbacks, config);\n\tconst mergedCallbacks = useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\t...sentryCallbacks,\n\t\t\tonMessageSent: (message) => {\n\t\t\t\tsentryCallbacks.onMessageSent?.(message);\n\t\t\t\tconst sessionId = latestSessionIdRef.current;\n\t\t\t\tif (!sessionId) return;\n\t\t\t\tlastOptimisticSessionIdRef.current = sessionId;\n\t\t\t\tclearRecentlyCompletedForSession(sessionId);\n\t\t\t\tsetOptimisticSessionActivity({\n\t\t\t\t\tkey: `message:${sessionId}:${Date.now()}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tlastMessageAt: new Date().toISOString(),\n\t\t\t\t\tsessionTitle: buildOptimisticSessionTitle(message),\n\t\t\t\t});\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId) => {\n\t\t\t\tconst previousSessionId = latestSessionIdRef.current;\n\t\t\t\tlatestSessionIdRef.current = sessionId;\n\t\t\t\tsentryCallbacks.onSessionIdChange?.(sessionId);\n\t\t\t\tif (\n\t\t\t\t\tpreviousSessionId &&\n\t\t\t\t\tpreviousSessionId !== sessionId &&\n\t\t\t\t\tlastOptimisticSessionIdRef.current === previousSessionId\n\t\t\t\t) {\n\t\t\t\t\tlastOptimisticSessionIdRef.current = sessionId;\n\t\t\t\t\tsetOptimisticSessionActivity((prev) =>\n\t\t\t\t\t\tprev\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\tkey: `session:${sessionId}:${Date.now()}`,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\tpreviousSessionId,\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tkey: `session:${sessionId}:${Date.now()}`,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\tpreviousSessionId,\n\t\t\t\t\t\t\t\t\tlastMessageAt: new Date().toISOString(),\n\t\t\t\t\t\t\t\t\tsessionTitle: UNTITLED_SESSION,\n\t\t\t\t\t\t\t },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonStreamComplete: (message) => {\n\t\t\t\tsentryCallbacks.onStreamComplete?.(message);\n\t\t\t\tconst sessionId = message.sessionId ?? latestSessionIdRef.current;\n\t\t\t\tif (!sessionId) return;\n\t\t\t\tmarkSessionCompleted(sessionId);\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tsentryCallbacks.onError?.(error);\n\t\t\t},\n\t\t}),\n\t\t[\n\t\t\tbuildOptimisticSessionTitle,\n\t\t\tclearRecentlyCompletedForSession,\n\t\t\tmarkSessionCompleted,\n\t\t\tsentryCallbacks,\n\t\t],\n\t);\n\tconst chat = useChatV2(config, mergedCallbacks);\n\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tprependMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t\tloadSession,\n\t\tuserActionState,\n\t\tapproveUserAction,\n\t\trejectUserAction,\n\t\tresendOtp,\n\t\tloadingSessionId,\n\t} = chat;\n\n\tuseEffect(() => {\n\t\tif (resetToEmptyStateRef.current) {\n\t\t\tif (messages.length === 0) {\n\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\tresetToEmptyStateRef.current = false;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (messages.length > 0 && !hasEverSentMessage) setHasEverSentMessage(true);\n\t}, [messages.length, hasEverSentMessage]);\n\n\tuseEffect(() => {\n\t\tif (!editingMessageId) return;\n\t\tconst stillExists = messages.some(\n\t\t\t(m) => m.id === editingMessageId && m.role === \"user\",\n\t\t);\n\t\tif (!stillExists) setEditingMessageId(null);\n\t}, [editingMessageId, messages]);\n\n\t// ============================================\n\t// Derived config (with defaults)\n\t// ============================================\n\tconst ui = config.ui ?? {};\n\tconst availability = config.availability ?? DEFAULT_AVAILABILITY;\n\tconst placeholder = ui.input?.placeholder ?? DEFAULT_PLACEHOLDER;\n\tconst emptyStateText = ui.emptyState?.text ?? DEFAULT_EMPTY_STATE_TEXT;\n\tconst showEmptyStateIcon = ui.emptyState?.icon ?? true;\n\tconst emptyStateComponent = ui.emptyState?.content;\n\tconst showResetButton = ui.input?.showResetButton ?? false;\n\tconst attachments = normalizeAttachments(ui.input?.attachments);\n\tconst voice = normalizeVoice(ui.input?.voice as never);\n\tconst sessionHistory = normalizeSessionHistory(ui.sessionHistory as never);\n\tconst messageActionsConfig = ui.messages?.actions;\n\t// Note: ui.agent, ui.messages.avatars/timestamps/streamingDot, ui.execution.*,\n\t// ui.layout are reserved for future plumbing into MessageListV2 / AssistantMessageV2.\n\t// They're part of the public config shape today and read by renderers internally\n\t// via message.isHistorical — full theming pass-through is a follow-up.\n\n\tconst messageActions = useMemo<Required<MessageActionsConfig>>(\n\t\t() => ({\n\t\t\tuserMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t},\n\t\t\tassistantMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\t},\n\t\t}),\n\t\t[messageActionsConfig],\n\t);\n\n\t// ============================================\n\t// Voice\n\t// ============================================\n\tconst {\n\t\ttranscribedText,\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: voice.options.lang ?? \"en-US\",\n\t\t\tinterimResults: voice.options.interimResults !== false,\n\t\t\tcontinuous: voice.options.continuous !== false,\n\t\t},\n\t\t{\n\t\t\tonEnd: () => {},\n\t\t\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t},\n\t);\n\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t\treturn;\n\t\t}\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [clearTranscript, isRecording, startRecording, stopRecording, voiceAvailable]);\n\n\tconst handleCancelRecording = () => {\n\t\tstopRecording();\n\t\tclearTranscript();\n\t};\n\tconst handleConfirmRecording = () => {\n\t\tstopRecording();\n\t};\n\n\t// ============================================\n\t// Reset session (with confirm modal)\n\t// ============================================\n\tconst performResetSession = useCallback(() => {\n\t\tresetToEmptyStateRef.current = true;\n\t\tsetEditingMessageId(null);\n\t\tsetIsResetSessionConfirmOpen(false);\n\t\tsetLightboxSrc(null);\n\t\tsetLightboxAlt(\"\");\n\t\tsetOptimisticSessionActivity(null);\n\t\tlatestSessionIdRef.current = undefined;\n\t\tlastOptimisticSessionIdRef.current = undefined;\n\t\tchatInputV2Ref.current?.setDraft(\"\");\n\t\tclearTranscript();\n\t\tif (isRecording) stopRecording();\n\t\tresetSession();\n\t\tcallbacks.onResetSession?.();\n\t}, [callbacks.onResetSession, clearTranscript, isRecording, resetSession, stopRecording]);\n\n\tconst requestResetSession = useCallback(() => setIsResetSessionConfirmOpen(true), []);\n\tconst closeResetSessionConfirm = useCallback(() => setIsResetSessionConfirmOpen(false), []);\n\n\t// ============================================\n\t// Context\n\t// ============================================\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tprependMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t\tisWaitingForResponse,\n\t\t],\n\t);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tresetSession: performResetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tloadSession,\n\t\t}),\n\t\t[performResetSession, clearMessages, cancelStream, getSessionId, getMessages, loadSession],\n\t);\n\n\tconst [v2VerificationPending, setV2VerificationPending] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetV2VerificationPending(false);\n\t}, [\n\t\tuserActionState.request?.userActionId,\n\t\tuserActionState.clearOtpTrigger,\n\t\tuserActionState.result,\n\t]);\n\n\t// ============================================\n\t// Disabled state\n\t// ============================================\n\tif (availability.state === \"disabled\") {\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"bg-background overflow-hidden flex flex-col flex-[4]\", className)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t{availability.reason ?? (\n\t\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\tconst isReadOnly = availability.state === \"readOnly\";\n\n\t// ============================================\n\t// Per-config helpers\n\t// ============================================\n\tconst handleImageClick = (src: string, alt: string) => {\n\t\tsetLightboxSrc(src);\n\t\tsetLightboxAlt(alt);\n\t};\n\n\tconst v2UserAction = useMemo(() => {\n\t\tif (!userActionState.request) return null;\n\t\tconst req = userActionState.request;\n\t\tlet status: VerificationStatusV2 = \"pending\";\n\t\tif (v2VerificationPending) status = \"verifying\";\n\t\telse if (userActionState.result === \"approved\") status = \"approved\";\n\t\telse if (userActionState.result === \"rejected\") status = \"rejected\";\n\t\treturn {\n\t\t\tmessageId: `ua-${req.userActionId || Date.now()}`,\n\t\t\taction: {\n\t\t\t\ttype: req.userActionType || \"generic\",\n\t\t\t\tmessage: req.message || \"Verify this action\",\n\t\t\t\tamount: req.metadata?.amount,\n\t\t\t\tpayeeName: req.metadata?.payeeName,\n\t\t\t},\n\t\t\tstatus,\n\t\t\tclearOtpTrigger: userActionState.clearOtpTrigger,\n\t\t};\n\t}, [\n\t\tuserActionState.request,\n\t\tuserActionState.result,\n\t\tuserActionState.clearOtpTrigger,\n\t\tv2VerificationPending,\n\t]);\n\n\tconst hideV2SendDuringVerification =\n\t\tv2UserAction != null &&\n\t\tv2UserAction.status !== \"approved\" &&\n\t\tv2UserAction.status !== \"rejected\";\n\n\tconst handleV2Send = (text: string) => {\n\t\tif (isRecording) stopRecording();\n\t\tif (text.trim()) {\n\t\t\tsetEditingMessageId(null);\n\t\t\tvoid sendMessage(text.trim());\n\t\t}\n\t};\n\n\tconst handleEditMessageDraft = useCallback(\n\t\t(messageId: string) => {\n\t\t\tconst targetMessage = messages.find((m) => m.id === messageId);\n\t\t\tif (!targetMessage?.content.trim()) return;\n\t\t\tsetEditingMessageId(messageId);\n\t\t\tchatInputV2Ref.current?.setDraft(targetMessage.content);\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tmessageListV2Ref.current?.scrollToBottom(\"smooth\");\n\t\t\t});\n\t\t},\n\t\t[messages],\n\t);\n\n\tconst handleRetryUserMessage = useCallback(\n\t\t(messageId: string) => {\n\t\t\tif (isWaitingForResponse) return;\n\t\t\tconst target = messages.find((m) => m.id === messageId && m.role === \"user\");\n\t\t\tif (!target?.content.trim()) return;\n\t\t\tvoid sendMessage(target.content.trim());\n\t\t\tconst bump = () => messageListV2Ref.current?.scrollToBottom(\"instant\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tbump();\n\t\t\t\tqueueMicrotask(() => window.setTimeout(bump, 120));\n\t\t\t});\n\t\t},\n\t\t[isWaitingForResponse, messages, sendMessage],\n\t);\n\n\tconst handleClearEditing = useCallback(() => setEditingMessageId(null), []);\n\n\tconst isEmpty = messages.length === 0;\n\tconst showEmptyShell = isEmpty && !hasEverSentMessage;\n\tconst currentSessionId = getSessionId();\n\n\tuseEffect(() => {\n\t\tlatestSessionIdRef.current = currentSessionId;\n\t}, [currentSessionId]);\n\n\t// ============================================\n\t// Render\n\t// ============================================\n\tconst inputElement = !isReadOnly && (\n\t\t<ChatInputV2\n\t\t\tref={chatInputV2Ref}\n\t\t\tonSend={handleV2Send}\n\t\t\tonCancel={cancelStream}\n\t\t\tdisabled={false}\n\t\t\tisStreaming={isWaitingForResponse}\n\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\tenableVoice={voice.enabled}\n\t\t\ttranscribedText={voice.enabled ? transcribedText : \"\"}\n\t\t\tvoiceAvailable={voice.enabled && voiceAvailable}\n\t\t\tisRecording={isRecording}\n\t\t\tonVoicePress={voice.enabled ? handleVoicePress : undefined}\n\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\tshowResetSession={showResetButton}\n\t\t\tonResetSession={requestResetSession}\n\t\t\tshowAttachmentButton={attachments.showMenu}\n\t\t\tshowUploadImageButton={attachments.uploadImage}\n\t\t\tshowAttachFileButton={attachments.attachFile}\n\t\t\tonUploadImageClick={callbacks.onUploadImageClick}\n\t\t\tonAttachFileClick={callbacks.onAttachFileClick}\n\t\t\teditingMessageId={editingMessageId}\n\t\t\tonClearEditing={handleClearEditing}\n\t\t\thideSendButton={hideV2SendDuringVerification}\n\t\t/>\n\t);\n\n\tconst handleSelectSession = useCallback(\n\t\tasync (session: { sessionId: string }) => {\n\t\t\t// Skip if the user is already on this session or a load for it\n\t\t\t// is already in flight. The hook also dedupes internally — this\n\t\t\t// short-circuit just avoids the useless state churn (sessionId\n\t\t\t// reset, callbacks, etc).\n\t\t\tif (\n\t\t\t\tsession.sessionId === currentSessionId ||\n\t\t\t\tsession.sessionId === loadingSessionId\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Prevent the merged `onSessionIdChange` callback (fired synchronously by\n\t\t\t// loadSession) from promoting this session to the top of the sidebar.\n\t\t\t// Optimistic promotion should only happen when the user sends a new\n\t\t\t// message in a session, not when they click to view one.\n\t\t\tlastOptimisticSessionIdRef.current = undefined;\n\t\t\tlatestSessionIdRef.current = session.sessionId;\n\t\t\t// Skip the empty-state shell so the messages area shows the\n\t\t\t// loading spinner instead of \"What can I help with?\".\n\t\t\tsetHasEverSentMessage(true);\n\t\t\ttry {\n\t\t\t\tawait loadSession(session.sessionId);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"Failed to load session\", err);\n\t\t\t}\n\t\t},\n\t\t[currentSessionId, loadingSessionId, loadSession],\n\t);\n\n\tconst sidebarElement = sessionHistory.enabled ? (\n\t\t<SessionHistorySidebar\n\t\t\tconfig={config}\n\t\t\toptions={sessionHistory.options}\n\t\t\tactiveSessionId={currentSessionId}\n\t\t\tloadingSessionId={loadingSessionId}\n\t\t\trecentlyCompletedSessionIds={recentlyCompletedSessionIds}\n\t\t\toptimisticActivity={optimisticSessionActivity}\n\t\t\tonSelectSession={handleSelectSession}\n\t\t\tonNewSession={requestResetSession}\n\t\t\tnewSessionDisabled={isWaitingForResponse || isRecording}\n\t\t\tmobileOpen={mobileSidebarOpen}\n\t\t\tonMobileOpenChange={setMobileSidebarOpen}\n\t\t/>\n\t) : null;\n\n\tconst mainPanel = (\n\t\t<div\n\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\tstyle={{\n\t\t\t\tflexDirection: isMobileViewport ? \"column\" : \"row\",\n\t\t\t\talignItems: \"stretch\",\n\t\t\t\tminHeight: 0,\n\t\t\t\toverflow: \"hidden\",\n\t\t\t}}\n\t\t>\n\t\t\t{sidebarElement}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: \"1 1 0%\",\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\talignItems: \"stretch\",\n\t\t\t\t\tjustifyContent: \"flex-start\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{showEmptyShell ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: \"1 1 0%\",\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\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\tgap: \"1.25rem\",\n\t\t\t\t\t\t\tpadding: \"0 1rem 1rem\",\n\t\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\ttext={emptyStateText}\n\t\t\t\t\t\t\tcontent={emptyStateComponent}\n\t\t\t\t\t\t\tshowIcon={showEmptyStateIcon}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\tmaxWidth: \"var(--payman-v2-max-content-width, 42rem)\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\t\tref={messageListV2Ref}\n\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\tisLoadingSession={!!loadingSessionId}\n\t\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\t\tonImageClick={handleImageClick}\n\t\t\t\t\t\t\tonExecutionTraceClick={callbacks.onExecutionTraceClick}\n\t\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\t\tuserAction={v2UserAction}\n\t\t\t\t\t\t\tonApproveAction={async (_id, otp) => {\n\t\t\t\t\t\t\t\tsetV2VerificationPending(true);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait approveUserAction(otp);\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\tsetV2VerificationPending(false);\n\t\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonRejectAction={async () => {\n\t\t\t\t\t\t\t\tsetV2VerificationPending(true);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait rejectUserAction();\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\tsetV2VerificationPending(false);\n\t\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonResendAction={async () => {\n\t\t\t\t\t\t\t\tawait resendOtp();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\"payman-v2-root\", className)}\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tminHeight: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{mainPanel}\n\n\t\t\t\t<ImageLightboxV2\n\t\t\t\t\tsrc={lightboxSrc}\n\t\t\t\t\talt={lightboxAlt}\n\t\t\t\t\tonClose={() => setLightboxSrc(null)}\n\t\t\t\t/>\n\t\t\t\t<ResetSessionConfirmModal\n\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n});\n\n// ============================================\n// Tiny empty-state renderer (v2 keeps it inline)\n// ============================================\n\nfunction EmptyState({\n\ttext,\n\tcontent,\n\tshowIcon,\n}: {\n\ttext: string;\n\tcontent?: React.ReactNode;\n\tshowIcon: boolean;\n}) {\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tpadding: \"8px 8px 0\",\n\t\t\t\tgap: 12,\n\t\t\t\tflex: \"0 0 auto\",\n\t\t\t}}\n\t\t>\n\t\t\t{content}\n\t\t\t{showIcon && !content && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 40,\n\t\t\t\t\t\tborderRadius: 12,\n\t\t\t\t\t\tbackground: \"var(--payman-v2-accent-bg, rgba(0,0,0,0.06))\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: 16,\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcolor: \"var(--payman-v2-text-1, #111)\",\n\t\t\t\t\twhiteSpace: \"pre-wrap\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{text}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Check, Copy, Menu, RotateCcw } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { ChatHeaderProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatHeader({\n\tsessionId,\n\tonCopySessionId,\n\tonNewSession,\n\tshowResetSession = false,\n\tonToggleSidebar,\n\tchildren,\n\tclassName,\n}: ChatHeaderProps) {\n\tconst [copiedSessionId, setCopiedSessionId] = useState(false);\n\n\tconst handleCopySessionId = async () => {\n\t\tif (sessionId && onCopySessionId) {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(sessionId);\n\t\t\t\tsetCopiedSessionId(true);\n\t\t\t\tsetTimeout(() => setCopiedSessionId(false), 2000);\n\t\t\t\tonCopySessionId(sessionId);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to copy session ID:\", error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst hasActions = showResetSession || !!children;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex items-center justify-between gap-3\",\n\t\t\t\t\"px-4 h-14 flex-shrink-0 w-full\",\n\t\t\t\t\"border-b border-border/60 bg-card/80 backdrop-blur-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex items-center gap-3 flex-1 min-w-0\">\n\t\t\t\t{onToggleSidebar && (\n\t\t\t\t\t<HeaderButton\n\t\t\t\t\t\tonClick={onToggleSidebar}\n\t\t\t\t\t\ttitle=\"Open session history\"\n\t\t\t\t\t\tclassName=\"sm:hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Menu className=\"w-4 h-4\" />\n\t\t\t\t\t</HeaderButton>\n\t\t\t\t)}\n\t\t\t\t<div className=\"flex flex-col justify-center min-w-0\">\n\t\t\t\t\t<span className=\"text-sm font-semibold text-foreground leading-tight truncate\">\n\t\t\t\t\t\tChat\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{sessionId && (\n\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t<motion.button\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\t\tonClick={handleCopySessionId}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1 mt-0.5 group\"\n\t\t\t\t\t\t\t\ttitle={`Copy: ${sessionId}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"font-mono text-[10px] leading-none text-muted-foreground group-hover:text-foreground transition-colors truncate max-w-[120px]\">\n\t\t\t\t\t\t\t\t\t{sessionId.length > 20\n\t\t\t\t\t\t\t\t\t\t? `${sessionId.substring(0, 8)}…${sessionId.slice(-8)}`\n\t\t\t\t\t\t\t\t\t\t: sessionId}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t{copiedSessionId ? (\n\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"check\"\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Check className=\"w-2.5 h-2.5 text-emerald-500\" />\n\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"copy\"\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Copy className=\"w-2.5 h-2.5 text-muted-foreground/50 group-hover:text-muted-foreground transition-colors\" />\n\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t</motion.button>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{hasActions && (\n\t\t\t\t<div className=\"flex items-center gap-1.5 flex-shrink-0\">\n\t\t\t\t\t{showResetSession && onNewSession && (\n\t\t\t\t\t\t<HeaderButton onClick={onNewSession} title=\"New Session\">\n\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" />\n\t\t\t\t\t\t\t<span className=\"hidden sm:inline\">Reset</span>\n\t\t\t\t\t\t</HeaderButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst HeaderButton = forwardRef<\n\tHTMLButtonElement,\n\tReact.ButtonHTMLAttributes<HTMLButtonElement> & { title?: string }\n>(({ children, className, ...props }, ref) => (\n\t<button\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg\",\n\t\t\t\"text-xs font-medium text-muted-foreground\",\n\t\t\t\"border border-border/50 bg-card/50\",\n\t\t\t\"hover:bg-muted hover:text-foreground hover:border-border\",\n\t\t\t\"active:scale-[0.97] transition-all duration-150\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</button>\n));\nHeaderButton.displayName = \"HeaderButton\";\n","import { useEffect, useRef, useState } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\nconst COMPLETE_PULSE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst [completePulse, setCompletePulse] = useState(false);\n\tconst prevLenRef = useRef(0);\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 =\n\t\tvalue.length === safeMaxLength && /^\\d+$/.test(value);\n\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [disabled]);\n\n\t// Trigger completion pulse when last digit is typed\n\tuseEffect(() => {\n\t\tlet t: number | undefined;\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tsetCompletePulse(true);\n\t\t\tt = window.setTimeout(\n\t\t\t\t() => setCompletePulse(false),\n\t\t\t\tCOMPLETE_PULSE_MS\n\t\t\t);\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t\treturn () => {\n\t\t\tif (typeof t === \"number\") {\n\t\t\t\twindow.clearTimeout(t);\n\t\t\t}\n\t\t};\n\t}, [isFull, value.length, safeMaxLength]);\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, char: string) => {\n\t\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (\n\t\tindex: number,\n\t\te: React.KeyboardEvent<HTMLInputElement>\n\t) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\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\treturn;\n\t\t}\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex justify-center\",\n\t\t\t\terror && \"payman-otp-shake\",\n\t\t\t\tcompletePulse && \"payman-otp-complete-pulse\"\n\t\t\t)}\n\t\t\tstyle={{ gap: 10 }}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"text-center font-semibold rounded-lg\",\n\t\t\t\t\t\t\"payman-otp-input otp-input\",\n\t\t\t\t\t\t\"transition-all duration-150 cursor-text\",\n\t\t\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t\t\t\terror && \"payman-otp-input--error\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 44,\n\t\t\t\t\t\theight: 50,\n\t\t\t\t\t\tfontSize: 20,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\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 { Loader2, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\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\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 [otpError, setOtpError] = useState(false);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\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 (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((p) => p - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — clearOtpTrigger fires, 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(resetActionState, ACTION_PENDING_TIMEOUT_MS);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Auto-submit when OTP is complete (digits only, length matches schema).\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\t// Focus trap\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusable = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n\t\t\t\t)\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusable();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key !== \"Tab\") return;\n\t\t\tconst items = getFocusable();\n\t\t\tif (!items.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst first = items[0];\n\t\t\tconst last = items[items.length - 1];\n\t\t\tconst active = document.activeElement as HTMLElement | null;\n\t\t\tconst inDialog = active ? dialog.contains(active) : false;\n\t\t\tif (e.shiftKey) {\n\t\t\t\tif (!inDialog || active === first) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!inDialog || active === last) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfirst.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\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\t// handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !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\n\treturn (\n\t\t<div\n\t\t\tclassName=\"payman-modal-backdrop\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\tinset: 0,\n\t\t\t\tzIndex: 10000,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpadding: 16,\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 backdrop-blur-sm payman-modal-backdrop-overlay payman-modal-animate\"\n\t\t\t\taria-hidden\n\t\t\t\tstyle={{\n\t\t\t\t\tbackground:\n\t\t\t\t\t\t\"var(--payman-modal-backdrop-bg, rgba(0, 0, 0, 0.4))\",\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tmaxWidth: 440,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby=\"payman-user-action-message\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl shadow-2xl\",\n\t\t\t\t\t\t\"payman-modal-dialog payman-modal-animate\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: 440,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tpadding: \"36px 32px 28px\",\n\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\"var(--payman-modal-dialog-bg, var(--payman-card, #ffffff))\",\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName=\"payman-modal-close-btn absolute flex items-center justify-center rounded-full border-0 bg-transparent p-0 cursor-pointer disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttop: 12,\n\t\t\t\t\t\t\tright: 12,\n\t\t\t\t\t\t\twidth: 28,\n\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={16} strokeWidth={2.5} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<p\n\t\t\t\t\t\tid=\"payman-user-action-message\"\n\t\t\t\t\t\tclassName=\"text-center leading-snug\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t\tmargin: \"0 0 20px\",\n\t\t\t\t\t\t\tpaddingRight: 24,\n\t\t\t\t\t\t\tpaddingLeft: 24,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{isPayment && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPay\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-bold tabular-nums tracking-tight\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 42,\n\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\tmargin: \"0 0 32px\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCreate Payee\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"text-center\"\n\t\t\t\t\t\t\tstyle={{ margin: \"0 0 32px\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName=\"font-bold leading-tight\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfontSize: 28,\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold uppercase\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t\t\t\topacity: 0.85,\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{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div style={{ marginBottom: 30 }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-2\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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<Loader2\n\t\t\t\t\t\t\t\t\tclassName=\"animate-spin shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-col items-center\"\n\t\t\t\t\t\tstyle={{ gap: 12, marginBottom: 32 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-resend border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"resend\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t</span>\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) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-cancel border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_REJECT}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : isPayee ? (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL_TRANSFER\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-row flex-nowrap items-center justify-center gap-1.5\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tborderTop:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tpaddingTop: 20,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-medium whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.9,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={paymanLogoMark}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: 18,\n\t\t\t\t\t\t\t\twidth: \"auto\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\tobjectFit: \"contain\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-bold whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-brand-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\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}","/**\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"]}
|