{"version":3,"file":"main.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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AAWp9B,EAAAA,QAAO6uB,CAAC;;;;;;;;;;EAyBzB,GAb2BwO,KAEvBh3B,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CC,EAAAA,EAAAA,MAACu2B,GAAY,CAAAx2B,SAAA,EACXJ,EAAAA,EAAAA,KAAC62B,GAAU,CAAAz2B,SAAC,SACZJ,EAAAA,EAAAA,KAAC82B,GAAY,CAAA12B,SAAC,sDACdJ,EAAAA,EAAAA,KAAC+2B,GAAQ,CAACx3B,KAAK,IAAGa,SAAC,qBACnBJ,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,SC9CR2gB,GAAwB,CACnC,CACE7D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,2BACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,+BACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,oBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CAAC,WAEf,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,aAGJ,CACE9D,QAAS,gBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,aAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,aAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,aAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,YAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,uBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,iBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YCjjDOC,GAA2B,CACtC,CACE/D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,2BACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,YAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,+BACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,oBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,YAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,gBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,aAGJ,CACE9D,QAAS,iBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,aAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,YAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,YAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,eACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,cACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,QACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,YACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,aAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,aACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,YAGJ,CACE9D,QAAS,OACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,UACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,uBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,aAGJ,CACE9D,QAAS,iBACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,SACT8D,WAAY,CACV,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAGJ,CACE9D,QAAS,WACT8D,WAAY,CACV,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YChrDOE,GAAmB,CAC9B,mDAAoD,CAClD11B,MAAO,qBACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,YACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAAS6W,GAAsBvmB,KAAK0iB,IAAO,CACzCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAI7C,qDAAsD,CACpDjf,MAAO,wBACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,YACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,oBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAAS+W,GAAyBzmB,KAAK0iB,IAAO,CAC5CjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,GAElB,CACEnb,MAAO,oBACPlE,KAAM,qBACN6T,KAAM,WACNsL,QAAS+W,GAAyBzmB,KAAK0iB,IAAO,CAC5CjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPwe,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,aACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,IC7FlC4W,GAAgB,CAC3B,CACEnE,QAAS,QACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,cACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,QACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,UACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,eACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,SACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,aAEnF,CACE9D,QAAS,SACT8D,WAAY,CAAC,WAAY,WAAY,SAAU,WAAY,UAAW,UAAW,cCQxEM,GAAmB93B,IAII,IAJH,QAC/BqS,EAAO,aACPC,EAAY,QACZC,GACevS,EACf,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,MACXvJ,GAAWuyB,EAAAA,EAAAA,OACV1mB,EAAYssB,IAAiBrxB,EAAAA,EAAAA,eAAyCnB,IACtEuM,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EASEoP,EAAOF,EANA,CACXkF,OAAQ7U,yDACRsyB,YAAatyB,+DACbo4B,aAAcp4B,gEAGqB,WAE/BoG,EAAmB7F,eAAeC,QAAQ,YAEhDyH,EAAAA,EAAAA,YAAU,KACRkxB,EAAcn4B,EAASyC,SAAS21B,WAAiC,GAChE,IAWH,MAAM3gB,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU,WACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,oBACdvV,MAAO,aACPzB,cAAe,QACfo1B,UAAU,EACV/gB,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OACE1R,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,CAC1C+N,EAAKgF,QAAWhF,EAAKyiB,aAAgBziB,EAAKuoB,cAG1C12B,EAAAA,EAAAA,KAACwC,EAAgB,CAAC,cAAY,0BAAyBpC,UACrDJ,EAAAA,EAAAA,KAAA,OAAK,cAAY,4BAA4BkD,MAAO,CAAEyzB,IAAK,UAAWv2B,UACpEC,EAAAA,EAAAA,MAAA,OAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMT9O,EAAAA,EAAAA,MAAC80B,GAAgB,CAAA/0B,SAAA,EACfJ,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC60B,GAAoB,CAAAz0B,SAClB+K,GAAkC,MAApBzG,GACb1E,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,uBACbC,IAAKZ,EAAKyiB,YACV5hB,WAAW,GACXrQ,OAAQ,CACNnF,KAAM2R,EAAaisB,GAAMjsB,QAAclG,EACvC0yB,mBAAoB,CAClBV,sBAAqB,GACrBE,yBAAwB,GACxBI,cAAaA,IAEf9F,SAAU5kB,KAAKqD,MAAMxL,GACrByG,WAAYA,GAEd+D,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAGoD,IAHnD,MACAjX,EAAK,eACLoQ,GACgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,yBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,IAGH,UAIRnP,EAAAA,EAAAA,KAAC0C,EAAmB,CAACQ,MAAO,CAAEwS,SAAU,SAAUC,IAAK,IAAKiiB,UAAW,SAAUx3B,UAC/EJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,wBACbC,IAAKZ,EAAKuoB,aACV1nB,WAAW,GACXrQ,OAAQ,CACNuD,MAAO,GACPqzB,kBAAkB,EAClBC,SAAU,GACVC,aAAa,EACbtqB,WAAY,SACZ1M,SAAS,GAEXyQ,QAAUnQ,GAA4BA,EAAMqB,SAE3CgW,IAA8E,IAA7E,MAAErX,EAAK,eAAEoQ,GAAiDiH,EAC1D,OAAOrX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,MACToG,SAAU,SACVC,IAAK,KAEPpG,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,aAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,MACToG,SAAU,SACVC,IAAK,KAEPpG,IAAK,EAAEnP,SAEN+O,GAEJ,iBAhJfnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KAyJtB5F,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,ECrVPuhB,GAAyB,CACpCn2B,MAAO,oCACPo2B,SAAU,CACR,CACEC,QAAS,oBACTnlB,KAAM,4JAER,CACEmlB,QAAS,aACTnlB,KAAM,gQAER,CACEmlB,QAAS,sBACTnlB,KAAM,4OAER,CACEmlB,QAAS,oBACTnlB,KAAM,8KAER,CACEmlB,QAAS,uBACTnlB,KAAM,6MAER,CACEmlB,QAAS,gBACTnlB,KAAM,yNAER,CACEmlB,QAAS,mBACTnlB,KAAM,uPAER,CACEmlB,QAAS,kBACTnlB,KAAM,gJAER,CACEmlB,QAAS,gBACTnlB,KAAM,qOAER,CACEmlB,QAAS,mBACTnlB,KAAM,qLAER,CACElR,MAAO,WACPs2B,KAAM,CACJ,CACED,QAAS,SACTnlB,KAAM,CACJ,+CACA,oEACA,uEAGJ,CACEmlB,QAAS,MACTnlB,KAAM,CACJ,+CACA,0DACA,8BACA,uEAGJ,CACEmlB,QAAS,aACTnlB,KAAM,CACJ,+CACA,0DACA,8BACA,uEAGJ,CACEmlB,QAAS,OACTnlB,KAAM,CACJ,+CACA,oEACA,yEAKR,CACEA,KAAM,+TCwLZ,GA/O2BlT,IAAsE,IAArE,QAAEqS,EAAO,aAAEC,EAAY,QAAEC,GAAyBvS,EAE5E,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAQEoP,EAAOF,EALA,CACXkF,OAAQ7U,yDACR25B,MAAO35B,2DAG4B,WAW/ByY,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU,WACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,uBACdvV,MAAO,aACPzB,cAAe,QACfo1B,UAAU,EACV/gB,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OACE1R,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,CAC1C+N,EAAKgF,QAAWhF,EAAK8pB,OAGrBj4B,EAAAA,EAAAA,KAACwC,EAAgB,CAAApC,UAEfC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,yBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAIoD,IAJnD,MACA5G,EAAK,eACLoQ,GAEgCxJ,EAChC,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,2BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMTnP,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,qBACbC,IAAKZ,EAAK8pB,MACVjpB,WAAW,GACXrQ,OAAQ,CAAEnF,KAAMq+B,IAChB3oB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,4BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,YAtFXnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA8FtB5F,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,ECvQP4hB,GAAyB,CACpCx2B,MAAO,+BAEPue,aAAc,CACZ,CACEve,MAAO,8BACPwe,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAAS,CACP,CAAEjb,MAAO,uBACT,CAAEA,MAAO,8BACT,CAAEA,MAAO,iCACT,CAAEA,MAAO,6BACT,CAAEA,MAAO,mCACT,CAAEA,MAAO,mCAEXgb,YAAY,KAIlB,CACEze,MAAO,oBACPwe,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,MAKpBI,YAAa,iBACbgP,cAAc,EAEd7O,aAAcA,QAGHyX,GAAiC,CAC5Cz2B,MAAO,8CAEPue,aAAc,CACZ,CACEve,MAAO,8BACPwe,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAAS,CACP,CAAEjb,MAAO,gCACT,CAAEA,MAAO,sCACT,CAAEA,MAAO,6CACT,CAAEA,MAAO,6CACT,CAAEA,MAAO,yCAEXgb,YAAY,KAIlB,CACEze,MAAO,oBACPwe,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,MAKpBI,YAAa,iBACbgP,cAAc,EAEd7O,aAAcA,QC5EH7mB,GAAgBF,EAAAA,QAAOC,GAAG;;;;;EC6B1Bw+B,GAAc14B,IAAwE,IAAvE,QAAEqS,EAAO,aAAEC,EAAY,QAAEC,GAA2BvS,EAC9E,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OAEV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAGEO,GAAWuyB,EAAAA,EAAAA,MAUXJ,EAAW,CACfxwB,KAAM8Q,GAAS2B,UAAY,GAC3B0c,YAAare,GAASsf,eAAiB,GACvC1pB,aAAcoK,GAASpK,cAAgB,GACvC+M,QAAS3C,GAAS6B,gBAAgB3S,MAAQ,GAC1CmyB,QAASrhB,GAAS6B,gBAAgBsf,SAASE,SAAW,IAGlDrc,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU/K,GAAMzH,KAChByS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,gBACdvV,MAAO,aACPzB,cAAe,QACfo1B,UAAU,EACV/gB,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAIfS,MAAOjD,EAEP0B,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,MAInB,CAACc,EAASP,IASN5D,EAAOF,EANA,CACXkF,OAAQ7U,yDACRsyB,YAAatyB,+DACbo4B,aAAcp4B,gEAGqB,WAErC,OAAK6P,EAAKgF,QAAWhF,EAAKyiB,aAAgBziB,EAAKuoB,cAK7Cr2B,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,EAC5CJ,EAAAA,EAAAA,KAACwC,EAAgB,CAAC,cAAY,0BAAyBpC,UACrDJ,EAAAA,EAAAA,KAAA,OAAK,cAAY,4BAA4BkD,MAAO,CAAEyzB,IAAK,UAAWv2B,UACpEC,EAAAA,EAAAA,MAAA,OAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,0BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,4BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMT9O,EAAAA,EAAAA,MAAC80B,GAAgB,CAAA/0B,SAAA,EACfJ,EAAAA,EAAAA,KAACnG,GAAa,CAAAuG,UACZJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,gBACbC,IAAKZ,EAAKyiB,YACV5hB,WAAW,GACXrQ,OAAQ,CACNnF,KACwB,+CAAtB8F,EAASyC,SACLo2B,GACAD,GACN/sB,WAAY,8BACZsmB,SAAU,CAAEA,aAEdviB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAA8E,IAA7E,MAAEjX,EAAK,eAAEoQ,GAAiD6G,EAC1D,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,kBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKPnP,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,wBACbC,IAAKZ,EAAKuoB,aACV1nB,WAAW,GACXrQ,OAAQ,CACNuD,MAAO,GACPqzB,kBAAkB,EAClBC,SAAU,GACVC,aAAa,EACbtqB,WAAY,SACZ1M,SAAS,GAEXyQ,QAAUnQ,GAA4BA,EAAMqB,SAE3CgW,IAA8E,IAA7E,MAAErX,EAAK,eAAEoQ,GAAiDiH,EAC1D,OAAOrX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,aAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,iBAQfnP,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,QA9IRtW,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA+IX,ECfPyyB,GAAsB,CACjC,CACEjF,QAAS,cACTkF,OAAQ,CAAC,QAAS,WAAY,QAAS,iBAAkB,cAE3D,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,SAAU,QAAS,UAAW,SAEnD,CACElF,QAAS,UACTkF,OAAQ,CAAC,UAAW,OAAQ,cAAe,SAAU,UAEvD,CACElF,QAAS,UACTkF,OAAQ,CACN,mBACA,qBACA,SACA,aACA,wBAGJ,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,SAAU,SAAU,UAAW,aAEpD,CACElF,QAAS,YACTkF,OAAQ,CAAC,eAAgB,UAAW,UAAW,UAAW,aAE5D,CACElF,QAAS,UACTkF,OAAQ,CAAC,UAAW,SAAU,WAAY,UAAW,YAEvD,CACElF,QAAS,YACTkF,OAAQ,CAAC,SAAU,YAAa,WAAY,QAAS,aAEvD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,OAAQ,OAAQ,WAAY,cAEjD,CACElF,QAAS,aACTkF,OAAQ,CAAC,OAAQ,QAAS,WAAY,cAAe,eAEvD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,WAAY,WAAY,SAAU,eAEvD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,QAAS,WAAY,aAAc,UAExD,CACElF,QAAS,aACTkF,OAAQ,CAAC,QAAS,aAAc,SAAU,WAAY,WAExD,CACElF,QAAS,WACTkF,OAAQ,CAAC,aAAc,eAAgB,UAAW,WAAY,cAEhE,CACElF,QAAS,UACTkF,OAAQ,CAAC,QAAS,QAAS,UAAW,UAAW,WAEnD,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,UAAW,QAAS,YAAa,UAExD,CACElF,QAAS,SACTkF,OAAQ,CAAC,cAAe,cAAe,cAAe,WAAY,aAEpE,CACElF,QAAS,QACTkF,OAAQ,CAAC,UAAW,aAAc,UAAW,UAAW,YAE1D,CACElF,QAAS,SACTkF,OAAQ,CAAC,UAAW,eAAgB,UAAW,mBAAoB,SAErE,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,0BAA2B,aAAc,QAAS,UAEvE,CACElF,QAAS,yBACTkF,OAAQ,CAAC,WAAY,aAAc,SAAU,QAAS,WAExD,CACElF,QAAS,WACTkF,OAAQ,CAAC,WAAY,cAAe,aAAc,OAAQ,UAE5D,CACElF,QAAS,SACTkF,OAAQ,CAAC,YAAa,iBAAkB,WAAY,WAAY,cAElE,CACElF,QAAS,SACTkF,OAAQ,CAAC,sBAAuB,eAAgB,QAAS,SAAU,WAErE,CACElF,QAAS,WACTkF,OAAQ,CAAC,QAAS,UAAW,QAAS,SAAU,SAElD,CACElF,QAAS,eACTkF,OAAQ,CAAC,cAAe,iBAAkB,YAAa,UAAW,eAEpE,CACElF,QAAS,UACTkF,OAAQ,CAAC,YAAa,SAAU,QAAS,SAAU,YAErD,CACElF,QAAS,WACTkF,OAAQ,CAAC,aAAc,YAAa,aAAc,gBAAiB,iBAErE,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,UAAW,SAAU,UAAW,WAErD,CACElF,QAAS,SACTkF,OAAQ,CAAC,UAAW,YAAa,WAAY,UAAW,WAE1D,CACElF,QAAS,aACTkF,OAAQ,CAAC,QAAS,UAAW,cAAe,gBAAiB,eAE/D,CACElF,QAAS,2BACTkF,OAAQ,CAAC,SAAU,QAAS,SAAU,YAAa,WAErD,CACElF,QAAS,OACTkF,OAAQ,CAAC,YAAa,UAAW,OAAQ,SAAU,SAErD,CACElF,QAAS,QACTkF,OAAQ,CAAC,WAAY,aAAc,aAAc,YAAa,gBAEhE,CACElF,QAAS,QACTkF,OAAQ,CAAC,WAAY,UAAW,YAAa,UAAW,cAE1D,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,WAAY,OAAQ,eAAgB,cAEzD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,YAAa,UAAW,SAAU,SAEvD,CACElF,QAAS,sBACTkF,OAAQ,CAAC,cAAe,eAAgB,UAAW,QAAS,WAE9D,CACElF,QAAS,mBACTkF,OAAQ,CAAC,WAAY,aAAc,aAAc,UAAW,cAE9D,CACElF,QAAS,aACTkF,OAAQ,CAAC,WAAY,QAAS,WAAY,UAAW,eAEvD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,QAAS,SAAU,SAAU,UAElD,CACElF,QAAS,OACTkF,OAAQ,CAAC,SAAU,mBAAoB,WAAY,UAAW,eAEhE,CACElF,QAAS,SACTkF,OAAQ,CAAC,UAAW,WAAY,UAAW,YAAa,WAE1D,CACElF,QAAS,iBACTkF,OAAQ,CAAC,SAAU,OAAQ,UAAW,QAAS,YAEjD,CACElF,QAAS,UACTkF,OAAQ,CAAC,aAAc,SAAU,SAAU,UAAW,YAExD,CACElF,QAAS,WACTkF,OAAQ,CAAC,WAAY,aAAc,WAAY,QAAS,WAE1D,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,aAAc,UAAW,UAAW,WAEzD,CACElF,QAAS,qBACTkF,OAAQ,CACN,gBACA,6BACA,UACA,eACA,kBAGJ,CACElF,QAAS,aACTkF,OAAQ,CAAC,OAAQ,SAAU,UAAW,UAAW,SAEnD,CACElF,QAAS,UACTkF,OAAQ,CAAC,QAAS,YAAa,SAAU,gBAAiB,YAE5D,CACElF,QAAS,QACTkF,OAAQ,CAAC,QAAS,aAAc,OAAQ,mBAAoB,cAE9D,CACElF,QAAS,cACTkF,OAAQ,CAAC,eAAgB,YAAa,aAAc,YAAa,cAEnE,CACElF,QAAS,oBACTkF,OAAQ,CAAC,SAAU,OAAQ,WAAY,UAAW,YAEpD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,QAAS,UAAW,YAAa,UAEtD,CACElF,QAAS,UACTkF,OAAQ,CAAC,UAAW,QAAS,QAAS,QAAS,iBAEjD,CACElF,QAAS,WACTkF,OAAQ,CAAC,UAAW,UAAW,WAAY,SAAU,UAEvD,CACElF,QAAS,WACTkF,OAAQ,CAAC,cAAe,YAAa,UAAW,SAAU,cAG5D,CACElF,QAAS,OACTkF,OAAQ,CAAC,OAAQ,OAAQ,UAAW,SAAU,OAEhD,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,QAAS,UAAW,SAAU,SAErD,CACElF,QAAS,SACTkF,OAAQ,CAAC,QAAS,YAAa,OAAQ,WAAY,SAErD,CACElF,QAAS,QACTkF,OAAQ,CAAC,aAAc,cAAe,cAAe,OAAQ,WAE/D,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,YAAa,UAAW,QAAS,cAEtD,CACElF,QAAS,UACTkF,OAAQ,CAAC,UAAW,UAAW,SAAU,UAAW,YAEtD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,UAAW,SAAU,UAAW,cAErD,CACElF,QAAS,QACTkF,OAAQ,CAAC,QAAS,SAAU,SAAU,WAAY,SAEpD,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,eAAgB,SAAU,YAAa,YAE5D,CACElF,QAAS,UACTkF,OAAQ,CAAC,eAAgB,UAAW,YAAa,WAAY,iBAE/D,CACElF,QAAS,YACTkF,OAAQ,CAAC,iBAAkB,iBAAkB,YAAa,QAAS,gBAErE,CACElF,QAAS,SACTkF,OAAQ,CAAC,UAAW,YAAa,SAAU,SAAU,SAEvD,CACElF,QAAS,gBACTkF,OAAQ,CAAC,SAAU,SAAU,OAAQ,UAAW,WAElD,CACElF,QAAS,SACTkF,OAAQ,CAAC,aAAc,SAAU,gBAAiB,UAAW,YAE/D,CACElF,QAAS,QACTkF,OAAQ,CAAC,iBAAkB,cAAe,YAAa,WAAY,eAErE,CACElF,QAAS,WACTkF,OAAQ,CAAC,cAAe,iBAAkB,WAAY,YAAa,gBAErE,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,WAAY,SAAU,UAAW,SAExD,CACElF,QAAS,UACTkF,OAAQ,CAAC,YAAa,YAAa,gBAAiB,WAAY,iBAElE,CACElF,QAAS,OACTkF,OAAQ,CAAC,SAAU,UAAW,UAAW,QAAS,WAEpD,CACElF,QAAS,OACTkF,OAAQ,CAAC,UAAW,QAAS,QAAS,QAAS,WAEjD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,OAAQ,WAAY,SAAU,cAEnD,CACElF,QAAS,SACTkF,OAAQ,CAAC,YAAa,WAAY,QAAS,gBAAiB,gBAE9D,CACElF,QAAS,QACTkF,OAAQ,CAAC,OAAQ,QAAS,SAAU,QAAS,YAE/C,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,cAAe,eAAgB,WAAY,eAElE,CACElF,QAAS,QACTkF,OAAQ,CAAC,QAAS,QAAS,WAAY,SAAU,YAEnD,CACElF,QAAS,SACTkF,OAAQ,CAAC,QAAS,QAAS,QAAS,QAAS,aAE/C,CACElF,QAAS,aACTkF,OAAQ,CAAC,aAAc,SAAU,WAAY,YAAa,WAE5D,CACElF,QAAS,QACTkF,OAAQ,CAAC,UAAW,UAAW,SAAU,SAAU,YAErD,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,QAAS,YAAa,UAAW,gBAEtD,CACElF,QAAS,SACTkF,OAAQ,CAAC,WAAY,YAAa,MAAO,UAAW,WAEtD,CACElF,QAAS,SACTkF,OAAQ,CAAC,cAAe,UAAW,YAAa,gBAAiB,UAEnE,CACElF,QAAS,aACTkF,OAAQ,CAAC,UAAW,MAAO,aAAc,UAAW,WAEtD,CACElF,QAAS,OACTkF,OAAQ,CAAC,YAAa,gBAAiB,cAAe,QAAS,YAEjE,CACElF,QAAS,SACTkF,OAAQ,CAAC,OAAQ,aAAc,UAAW,UAAW,YAEvD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,UAAW,QAAS,QAAS,SAElD,CACElF,QAAS,UACTkF,OAAQ,CAAC,SAAU,eAAgB,SAAU,WAAY,eAE3D,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,UAAW,SAAU,SAAU,aAEtD,CACElF,QAAS,QACTkF,OAAQ,CAAC,UAAW,WAAY,UAAW,QAAS,WAEtD,CACElF,QAAS,gBACTkF,OAAQ,CAAC,QAAS,SAAU,UAAW,UAAW,WAEpD,CACElF,QAAS,YACTkF,OAAQ,CAAC,UAAW,SAAU,WAAY,WAAY,cAExD,CACElF,QAAS,aACTkF,OAAQ,CAAC,kBAAmB,mBAAoB,cAAe,YAAa,eAE9E,CACElF,QAAS,aACTkF,OAAQ,CAAC,eAAgB,YAAa,YAAa,eAAgB,cAErE,CACElF,QAAS,SACTkF,OAAQ,CAAC,WAAY,WAAY,QAAS,QAAS,YAErD,CACElF,QAAS,WACTkF,OAAQ,CAAC,eAAgB,cAAe,OAAQ,cAAe,YAEjE,CACElF,QAAS,WACTkF,OAAQ,CAAC,OAAQ,YAAa,aAAc,iBAAkB,cAEhE,CACElF,QAAS,OACTkF,OAAQ,CAAC,SAAU,UAAW,WAAY,QAAS,UAErD,CACElF,QAAS,QACTkF,OAAQ,CAAC,WAAY,aAAc,QAAS,SAAU,cAExD,CACElF,QAAS,mBACTkF,OAAQ,CAAC,SAAU,QAAS,SAAU,QAAS,cAEjD,CACElF,QAAS,aACTkF,OAAQ,CAAC,aAAc,aAAc,QAAS,QAAS,aAEzD,CACElF,QAAS,YACTkF,OAAQ,CAAC,aAAc,WAAY,SAAU,gBAAiB,0BAEhE,CACElF,QAAS,SACTkF,OAAQ,CAAC,cAAe,cAAe,YAAa,SAAU,YAEhE,CACElF,QAAS,aACTkF,OAAQ,CAAC,UAAW,UAAW,QAAS,OAAQ,SAElD,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,WAAY,QAAS,SAAU,UAEtD,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,cAAe,eAAgB,cAAe,eAEnE,CACElF,QAAS,WACTkF,OAAQ,CAAC,cAAe,UAAW,UAAW,aAAc,UAE9D,CACElF,QAAS,aACTkF,OAAQ,CAAC,YAAa,SAAU,cAAe,WAAY,iBAE7D,CACElF,QAAS,UACTkF,OAAQ,CAAC,aAAc,QAAS,MAAO,YAAa,YAEtD,CACElF,QAAS,aACTkF,OAAQ,CAAC,SAAU,QAAS,UAAW,UAAW,cAEpD,CACElF,QAAS,kBACTkF,OAAQ,CAAC,SAAU,WAAY,YAAa,aAAc,SAE5D,CACElF,QAAS,UACTkF,OAAQ,CAAC,WAAY,QAAS,aAAc,aAAc,aAE5D,CACElF,QAAS,QACTkF,OAAQ,CAAC,QAAS,aAAc,OAAQ,UAAW,UAErD,CACElF,QAAS,QACTkF,OAAQ,CAAC,YAAa,UAAW,WAAY,aAAc,YAE7D,CACElF,QAAS,cACTkF,OAAQ,CAAC,YAAa,YAAa,YAAa,UAAW,cAE7D,CACElF,QAAS,cACTkF,OAAQ,CAAC,WAAY,aAAc,eAAgB,WAAY,YAEjE,CACElF,QAAS,YACTkF,OAAQ,CAAC,UAAW,OAAQ,SAAU,aAAc,YAEtD,CACElF,QAAS,QACTkF,OAAQ,CAAC,SAAU,SAAU,SAAU,SAAU,WAEnD,CACElF,QAAS,UACTkF,OAAQ,CAAC,QAAS,QAAS,OAAQ,SAAU,kBAE/C,CACElF,QAAS,cACTkF,OAAQ,CAAC,YAAa,UAAW,WAAY,QAAS,YAExD,CACElF,QAAS,kBACTkF,OAAQ,CAAC,SAAU,SAAU,WAAY,SAAU,WAErD,CACElF,QAAS,SACTkF,OAAQ,CAAC,OAAQ,SAAU,YAAa,YAAa,YAEvD,CACElF,QAAS,OACTkF,OAAQ,CAAC,SAAU,UAAW,QAAS,QAAS,QAElD,CACElF,QAAS,WACTkF,OAAQ,CAAC,UAAW,SAAU,YAAa,aAAc,eAE3D,CACElF,QAAS,QACTkF,OAAQ,CAAC,YAAa,QAAS,WAAY,WAAY,WAEzD,CACElF,QAAS,SACTkF,OAAQ,CAAC,cAAe,gBAAiB,QAAS,QAAS,gBAE7D,CACElF,QAAS,mBACTkF,OAAQ,CAAC,eAAgB,MAAO,cAAe,SAAU,WAE3D,CACElF,QAAS,WACTkF,OAAQ,CAAC,WAAY,kBAAmB,cAAe,UAAW,wBAEpE,CACElF,QAAS,OACTkF,OAAQ,CAAC,OAAQ,WAAY,WAAY,WAAY,UAEvD,CACElF,QAAS,cACTkF,OAAQ,CAAC,SAAU,cAAe,YAAa,aAAc,mBAE/D,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,SAAU,OAAQ,UAAW,WAElD,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,QAAS,QAAS,UAAW,YAElD,CACElF,QAAS,QACTkF,OAAQ,CAAC,OAAQ,YAAa,YAAa,UAAW,WAExD,CACElF,QAAS,UACTkF,OAAQ,CAAC,YAAa,cAAe,YAAa,OAAQ,cAE5D,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,mBAAoB,cAAe,gBAAiB,oBAEzE,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,SAAU,WAAY,YAAa,YAExD,CACElF,QAAS,wBACTkF,OAAQ,CAAC,aAAc,cAAe,mBAAoB,kBAAmB,UAE/E,CACElF,QAAS,cACTkF,OAAQ,CAAC,WAAY,aAAc,YAAa,aAAc,WAEhE,CACElF,QAAS,mCACTkF,OAAQ,CAAC,YAAa,aAAc,cAAe,gBAAiB,UAEtE,CACElF,QAAS,QACTkF,OAAQ,CAAC,OAAQ,UAAW,UAAW,UAAW,UAEpD,CACElF,QAAS,aACTkF,OAAQ,CAAC,aAAc,aAAc,iBAAkB,YAAa,eAEtE,CACElF,QAAS,wBACTkF,OAAQ,CAAC,WAAY,cAAe,QAAS,YAAa,YAE5D,CACElF,QAAS,eACTkF,OAAQ,CAAC,SAAU,SAAU,QAAS,SAAU,WAElD,CACElF,QAAS,UACTkF,OAAQ,CAAC,QAAS,QAAS,QAAS,UAAW,UAEjD,CACElF,QAAS,SACTkF,OAAQ,CAAC,WAAY,WAAY,MAAO,aAAc,aAExD,CACElF,QAAS,aACTkF,OAAQ,CAAC,WAAY,eAAgB,YAAa,cAAe,aAEnE,CACElF,QAAS,eACTkF,OAAQ,CAAC,WAAY,KAAM,SAAU,SAAU,UAEjD,CACElF,QAAS,YACTkF,OAAQ,CAAC,cAEX,CACElF,QAAS,WACTkF,OAAQ,CAAC,aAAc,SAAU,SAAU,SAAU,UAEvD,CACElF,QAAS,WACTkF,OAAQ,CAAC,YAAa,UAAW,QAAS,QAAS,YAErD,CACElF,QAAS,kBACTkF,OAAQ,CAAC,UAAW,OAAQ,OAAQ,OAAQ,WAE9C,CACElF,QAAS,UACTkF,OAAQ,CAAC,YAAa,WAAY,SAAU,UAAW,WAEzD,CACElF,QAAS,eACTkF,OAAQ,CAAC,eAAgB,YAAa,SAAU,WAAY,mBAE9D,CACElF,QAAS,cACTkF,OAAQ,CAAC,QAAS,QAAS,UAAW,QAAS,YAEjD,CACElF,QAAS,cACTkF,OAAQ,CAAC,OAAQ,UAAW,MAAO,QAAS,QAE9C,CACElF,QAAS,QACTkF,OAAQ,CAAC,SAAU,YAAa,WAAY,UAAW,aAEzD,CACElF,QAAS,YACTkF,OAAQ,CAAC,UAAW,QAAS,QAAS,SAAU,YAElD,CACElF,QAAS,QACTkF,OAAQ,CAAC,WAAY,WAAY,aAAc,UAAW,aAE5D,CACElF,QAAS,WACTkF,OAAQ,CAAC,aAAc,WAAY,iBAAkB,SAAU,WAEjE,CACElF,QAAS,SACTkF,OAAQ,CAAC,YAAa,aAAc,QAAS,UAAW,aAE1D,CACElF,QAAS,cACTkF,OAAQ,CAAC,SAAU,SAAU,QAAS,WAAY,SAEpD,CACElF,QAAS,QACTkF,OAAQ,CAAC,WAAY,SAAU,OAAQ,UAAW,SAEpD,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,YAAa,WAAY,SAAU,YAExD,CACElF,QAAS,aACTkF,OAAQ,CAAC,WAAY,UAAW,QAAS,eAAgB,gBAE3D,CACElF,QAAS,WACTkF,OAAQ,CAAC,gBAAiB,SAAU,SAAU,SAAU,UAE1D,CACElF,QAAS,WACTkF,OAAQ,CAAC,UAAW,aAAc,aAAc,UAAW,sBAE7D,CACElF,QAAS,cACTkF,OAAQ,CAAC,OAAQ,SAAU,UAAW,OAAQ,UAEhD,CACElF,QAAS,OACTkF,OAAQ,CAAC,OAAQ,SAAU,OAAQ,UAAW,aAEhD,CACElF,QAAS,QACTkF,OAAQ,CAAC,aAAc,SAAU,aAAc,QAAS,YAE1D,CACElF,QAAS,sBACTkF,OAAQ,CAAC,gBAAiB,eAAgB,YAAa,QAAS,gBAElE,CACElF,QAAS,UACTkF,OAAQ,CAAC,QAAS,OAAQ,SAAU,aAAc,aAEpD,CACElF,QAAS,SACTkF,OAAQ,CAAC,WAAY,SAAU,QAAS,QAAS,YAEnD,CACElF,QAAS,eACTkF,OAAQ,CAAC,WAAY,cAAe,UAAW,OAAQ,eAEzD,CACElF,QAAS,SACTkF,OAAQ,CAAC,WAAY,SAAU,YAAa,SAAU,YAExD,CACElF,QAAS,SACTkF,OAAQ,CAAC,UAAW,OAAQ,OAAQ,UAAW,UAEjD,CACElF,QAAS,UACTkF,OAAQ,CAAC,OAAQ,UAAW,SAAU,SAAU,YAElD,CACElF,QAAS,uBACTkF,OAAQ,CAAC,QAAS,YAAa,UAAW,SAAU,UAEtD,CACElF,QAAS,iBACTkF,OAAQ,CAAC,SAAU,aAAc,aAAc,UAAW,cAE5D,CACElF,QAAS,gBACTkF,OAAQ,CAAC,WAAY,cAAe,UAAW,UAAW,YAE5D,CACElF,QAAS,UACTkF,OAAQ,CAAC,aAAc,QAAS,WAAY,cAAe,WAE7D,CACElF,QAAS,aACTkF,OAAQ,CAAC,WAAY,YAAa,WAAY,UAAW,YAE3D,CACElF,QAAS,UACTkF,OAAQ,CAAC,YAAa,aAAc,SAAU,UAAW,SAE3D,CACElF,QAAS,eACTkF,OAAQ,CAAC,iBAEX,CACElF,QAAS,YACTkF,OAAQ,CAAC,UAAW,YAAa,WAAY,eAAgB,mBAE/D,CACElF,QAAS,UACTkF,OAAQ,CAAC,mBAAoB,QAAS,UAAW,WAAY,cAE/D,CACElF,QAAS,QACTkF,OAAQ,CAAC,SAAU,OAAQ,OAAQ,MAAO,gBAE5C,CACElF,QAAS,SACTkF,OAAQ,CAAC,SAAU,QAAS,QAAS,QAAS,aAEhD,CACElF,QAAS,WACTkF,OAAQ,CAAC,SAAU,WAAY,cAAe,SAAU,WCrjC/ClB,GAAmB,CAC9B,oDAAqD,CACnD11B,MAAO,qBACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,YACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAASiY,GAAoB3nB,KAAK0iB,IAAO,CACvCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,GAElB,CACEnb,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAASiY,GAAoB3nB,KAAK0iB,IAAO,CACvCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QDpBgB,CAC1B,CAAEjb,MAAO,SACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UCcCgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,eACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,sBACPlE,KAAM,cACN6T,KAAM,WACNsL,QD9De,CACzB,CAAEjb,MAAO,OACT,CAAEA,MAAO,QACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,QACT,CAAEA,MAAO,QACT,CAAEA,MAAO,WACT,CAAEA,MAAO,QACT,CAAEA,MAAO,aACT,CAAEA,MAAO,QACT,CAAEA,MAAO,SACT,CAAEA,MAAO,WACT,CAAEA,MAAO,QACT,CAAEA,MAAO,QACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,SACT,CAAEA,MAAO,YACT,CAAEA,MAAO,aACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,cACT,CAAEA,MAAO,eACT,CAAEA,MAAO,iBCsCCgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,uBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CAEEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,SAAW,CAAEA,MAAO,qCACvCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAKb,CACEzD,MAAO,2BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,YAAc,CAAEA,MAAO,aAC1Cgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,6BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,aAAe,CAAEA,MAAO,aAAe,CAAEA,MAAO,cACnEgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAKb,CACEzD,MAAO,+CACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,gBACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,OAAS,CAAEA,MAAO,OACrCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,kCACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,6BACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,KAItB,CACE5e,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,iBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAG7C,0DAA2D,CACzDjf,MAAO,2BACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,UACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAASiY,GAAoB3nB,KAAK0iB,IAAO,CACvCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,qBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,GAElB,CACEnb,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,cACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,aACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,KAAO,CAAEA,MAAO,MACnCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,sBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,gBACN6T,KAAM,qBACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,mCAIb,CACEzD,MAAO,uBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,SAAW,CAAEA,MAAO,qCACvCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,2BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,YAAc,CAAEA,MAAO,aAC1Cgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,6BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,aAAe,CAAEA,MAAO,aAAe,CAAEA,MAAO,cACnEgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,iBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAG7C,qDAAsD,CACpDjf,MAAO,uBACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,YACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS+W,GAAyBzmB,KAAK0iB,IAAO,CAC5CjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,GAElB,CACEnb,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS+W,GAAyBzmB,KAAK0iB,IAAO,CAC5CjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QDvSiB,CAC3B,CAAEjb,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,WC6RCgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,uBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,SAAW,CAAEA,MAAO,qCACvCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,2BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,YAAc,CAAEA,MAAO,aAC1Cgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,6BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,aAAe,CAAEA,MAAO,aAAe,CAAEA,MAAO,cACnEgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,+CACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,gBACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,OAAS,CAAEA,MAAO,OACrCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,kCACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,6BACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,KAItB,CACE5e,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,iBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAG7C,mEAAoE,CAClEjf,MAAO,oCACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,UACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QD1VgB,CAC1B,CAAEjb,MAAO,eACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,uBACT,CAAEA,MAAO,aACT,CAAEA,MAAO,WACT,CAAEA,MAAO,aACT,CAAEA,MAAO,WACT,CAAEA,MAAO,cACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,cACT,CAAEA,MAAO,YACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,0BACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,cACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UACT,CAAEA,MAAO,4BACT,CAAEA,MAAO,QACT,CAAEA,MAAO,SACT,CAAEA,MAAO,SACT,CAAEA,MAAO,YACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,cACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,QACT,CAAEA,MAAO,UACT,CAAEA,MAAO,kBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,sBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,eACT,CAAEA,MAAO,qBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,QACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,aACT,CAAEA,MAAO,UACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,SACT,CAAEA,MAAO,YACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,aACT,CAAEA,MAAO,QACT,CAAEA,MAAO,QACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,SACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,SACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,QACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,aACT,CAAEA,MAAO,cACT,CAAEA,MAAO,cACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,QACT,CAAEA,MAAO,SACT,CAAEA,MAAO,oBACT,CAAEA,MAAO,cACT,CAAEA,MAAO,aACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YACT,CAAEA,MAAO,cACT,CAAEA,MAAO,WACT,CAAEA,MAAO,cACT,CAAEA,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,SACT,CAAEA,MAAO,eACT,CAAEA,MAAO,eACT,CAAEA,MAAO,aACT,CAAEA,MAAO,SACT,CAAEA,MAAO,WACT,CAAEA,MAAO,eACT,CAAEA,MAAO,mBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,QACT,CAAEA,MAAO,YACT,CAAEA,MAAO,SACT,CAAEA,MAAO,aACT,CAAEA,MAAO,UACT,CAAEA,MAAO,oBACT,CAAEA,MAAO,YACT,CAAEA,MAAO,QACT,CAAEA,MAAO,eACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YACT,CAAEA,MAAO,SACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,yBACT,CAAEA,MAAO,eACT,CAAEA,MAAO,oCACT,CAAEA,MAAO,SACT,CAAEA,MAAO,cACT,CAAEA,MAAO,yBACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,aACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,mBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,eACT,CAAEA,MAAO,eACT,CAAEA,MAAO,SACT,CAAEA,MAAO,aACT,CAAEA,MAAO,SACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UACT,CAAEA,MAAO,eACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,eACT,CAAEA,MAAO,QACT,CAAEA,MAAO,SACT,CAAEA,MAAO,uBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,wBACT,CAAEA,MAAO,kBACT,CAAEA,MAAO,4BACT,CAAEA,MAAO,WACT,CAAEA,MAAO,cACT,CAAEA,MAAO,WACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,aACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,aCsJuBuL,KAAK0iB,IAAO,CAChCjuB,MAAOiuB,EAAQjuB,UAEjBgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,SACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,gBACPlE,KAAM,SACN6T,KAAM,WACNsL,QDnKW,CACrB,CAAEjb,MAAO,gBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,UC+JkBuL,KAAK6nB,IAAM,CAC1BpzB,MAAOozB,EAAOpzB,UAEhBgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,gCACPlE,KAAM,kBACN6T,KAAM,WACNsL,QDtawB,CAClC,CAAEjb,MAAO,aACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,cACT,CAAEA,MAAO,iBCiaCgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QD3aiB,CAC3B,CAAEjb,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YC6ZwBuL,KAAK8nB,IAAQ,CAClCrzB,MAAOqzB,EAASrzB,UAElBgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,uBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,aAAe,CAAEA,MAAO,aAAe,CAAEA,MAAO,cACnEgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,iBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAG7C,oDAAqD,CACnDjf,MAAO,qBACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,UACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAASiY,GAAoB3nB,KAAK0iB,IAAO,CACvCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,qBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,GAElB,CACEnb,MAAO,oBACPlE,KAAM,YACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QDvfgB,CAC1B,CAAEjb,MAAO,SACT,CAAEA,MAAO,SACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,WACT,CAAEA,MAAO,aCyeCgb,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,uBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,SAAW,CAAEA,MAAO,qCACvCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,2BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,YAAc,CAAEA,MAAO,aAC1Cgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,6BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,eACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,aAAe,CAAEA,MAAO,aAAe,CAAEA,MAAO,cACnEgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAKb,CACEzD,MAAO,+CACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACEjf,KAAM,gBACN6T,KAAM,QACNsL,QAAS,CAAC,CAAEjb,MAAO,OAAS,CAAEA,MAAO,OACrCgb,YAAY,EACZG,gBAAgB,EAChBnb,MAAO,MAIb,CACEzD,MAAO,kCACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,6BACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,KAItB,CACE5e,MAAO,yBACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,iBACN6T,KAAM,WACNqL,YAAY,EACZC,QAAS,GACTE,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,GAG7C,mDAAoD,CAClDjf,MAAO,2BACP21B,UAAW,GACXpX,aAAc,CACZ,CACEve,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAASmX,GAAc7mB,KAAK0iB,IAAO,CACjCjuB,MAAOiuB,EAAQA,YAEjBjT,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,WACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,kBACPlE,KAAM,WACN6T,KAAM,WACNsL,QAAS,GACTD,YAAY,EACZG,gBAAgB,KAItB,CACE5e,MAAO,6BACPkuB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,mCACPlE,KAAM,UACN6T,KAAM,WACNsL,QDxtBY,CACtB,CAAEjb,MAAO,qBACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,gBCqtBCgb,YAAY,EACZG,gBAAgB,MAKxBC,YAAa,iBACbgP,cAAc,EACd7O,aAAeC,IACb2W,MAAM,wBAA0B3W,EAAS,IC/rBlC8X,GAAe/4B,IAAsE,IAArE,QAAEqS,EAAO,aAAEC,EAAY,QAAEC,GAAyBvS,EAC7E,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,MACXvJ,GAAWuyB,EAAAA,EAAAA,OACV1mB,EAAYssB,IAAiBrxB,EAAAA,EAAAA,eAAyCnB,GACvEP,EAAmB7F,eAAeC,QAAQ,YACzC0S,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,GAGJwH,EAAAA,EAAAA,YAAU,KACRkxB,EAAcn4B,EAASyC,SAAS21B,WAAiC,GAChE,IAEH,MAMMvpB,EAAOF,EANA,CACXkF,OAAQ7U,yDACRsyB,YAAatyB,+DACbo4B,aAAcp4B,gEAGqB,WAW/ByY,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU,OACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,gBACdvV,MAAO,aACPzB,cAAe,QACfo1B,UAAU,EACV/gB,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OACE1R,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,CAC1C+N,EAAKgF,QAAWhF,EAAKyiB,aAAgBziB,EAAKuoB,cAG1C12B,EAAAA,EAAAA,KAACwC,EAAgB,CAAC,cAAY,0BAAyBpC,UACrDJ,EAAAA,EAAAA,KAAA,OAAK,cAAY,4BAA4BkD,MAAO,CAAEyzB,IAAK,UAAWv2B,UACpEC,EAAAA,EAAAA,MAAA,OAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMT9O,EAAAA,EAAAA,MAAC80B,GAAgB,CAAA/0B,SAAA,EACfJ,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC60B,GAAoB,CAAAz0B,SAClB+K,GAAkC,MAApBzG,GACb1E,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,uBACbC,IAAKZ,EAAKyiB,YACV5hB,WAAW,GACXrQ,OAAQ,CACNnF,KAAM2R,EAAaisB,GAAMjsB,QAAclG,EACvC0yB,mBAAoB,CAClBV,sBAAqB,GACrBE,yBAAwB,GACxBI,cAAa,GACbc,oBAAmBA,IAErB5G,SAAU5kB,KAAKqD,MAAMxL,GACrByG,WAAYA,GAEd+D,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAGoD,IAHnD,MACAjX,EAAK,eACLoQ,GACgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,yBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,IAGH,UAIRnP,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,qBACbC,IAAKZ,EAAKuoB,aACV1nB,WAAW,GACXrQ,OAAQ,CACNuD,MAAO,GACPqzB,kBAAkB,EAClBC,SAAU,GACVC,aAAa,EACbtqB,WAAY,SACZ1M,SAAS,GAEXyQ,QAAUnQ,GAA4BA,EAAMqB,SAE3CgW,IAA8E,IAA7E,MAAErX,EAAK,eAAEoQ,GAAiDiH,EAC1D,OAAOrX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,MACToG,SAAU,SACVC,IAAK,KAEPpG,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,aAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,MACToG,SAAU,SACVC,IAAK,KAEPpG,IAAK,EAAEnP,SAEN+O,GAEJ,iBAjJfnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA0JtB5F,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,EC/UP5T,GAAsB/I,EAAAA,QAAOC,GAAG;;EA0BhC8+B,IAtBgB/+B,EAAAA,QAAOC,GAAG;;;;EAMPD,EAAAA,QAAOC,GAAG;;;;;;;;;;;;;;EAgBXD,EAAAA,QAAOC,GAAG;;;;;;;;;;;;GC2MzC,ID7L6BD,EAAAA,QAAOC,GAAG;;EClBZ8F,IAKkB,IALjB,KAC1BuB,EAAI,QACJ8Q,EAAO,aACPC,EAAY,QACZC,GACwBvS,EACxB,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACVkG,EAAKoL,IAAU/T,EAAAA,EAAAA,UAAwB,OACvCoL,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAYEwU,GAAgBC,EAAAA,EAAAA,UACpB,KAAM,CACJC,SAAUxS,EACVyS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd3S,MAAO,aACPzB,cAAe,QAEfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAEjB0D,MAAOjD,KAET,CAAChR,EAAM8Q,EAASO,IAmBlB,OAhBA/L,EAAAA,EAAAA,YAAU,KACUvN,WAChB,MAAMohB,QAAYxM,MAChBtP,sFACA,CACEuP,MAAO,aAGLrU,QAAa4gB,EAAIrM,OACvBoM,EAAO,kEAAyD3gB,EAAK,aAAa,EAEpF6gB,GAAY9O,OAAOxM,IACjBmN,QAAQnN,MAAM,uBAAwBA,EAAM,GAC5C,GACD,KAGDsB,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,CAC3C2O,GAAOgD,IACN/R,EAAAA,EAAAA,KAAC04B,GAAe,CAAC,cAAY,iCAAgCt4B,UAC3DJ,EAAAA,EAAAA,KAAA,OAAK,cAAY,mCAAkCI,UACjDJ,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,yBACbC,IAAKA,EACLC,WAAW,GACXrQ,OAAQ,CACNuD,MAAO,mBACPqR,cAAeA,EACf3K,OAAQqJ,EACR+f,UAAWtpB,GAAMoL,QACjBL,SAAUxS,EACV+Q,aAAcA,EACdD,QAASA,GAEX7C,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,2BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,WAObnP,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,GCkHpB,GA/Ua5W,IAA8C,IAA7C,aAAEi5B,GAAwBj5B,EACtC,OACEW,EAAAA,EAAAA,MAACqqB,GAAa,CAACxnB,MAAOy1B,GAAgB,CAAErpB,QAAS,KAAMlP,SAAA,EACnDu4B,IAAgB34B,EAAAA,EAAAA,KAACu0B,GAAS,CAAAn0B,SAAC,gCAC7BJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAC5gB,MAAOy1B,GAAgB,CAAE91B,MAAO,QAASzC,UAClDC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,sDAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,mFAGVJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,mCACVJ,EAAAA,EAAAA,KAAA,MAAAI,UACEC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,CAAI,kCACkCJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,aAAiB,mBAAuB,KACpFJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kBAAsB,uDAGlCJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,iCACVC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,wHACqC,KAC5EJ,EAAAA,EAAAA,KAAA,KACET,KAAK,yDACL2D,MAAO,CAAE0X,MAAO,WAAYxa,SAC7B,2BAEG,QAGNC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,4IAIzCC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,6BAAiC,4BAA0B,KACnEJ,EAAAA,EAAAA,KAAA,KACET,KAAK,2KACL2D,MAAO,CAAE0X,MAAO,WAAYxa,SAC7B,yCAEI,IAAI,oCAGXC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,6BAAiC,6DACzBJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,qBAA+B,iIAO/DJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,wEAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,sDACVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,iCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,wCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,8BACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,8DACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,wDAIVJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,+DAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,6GAIVJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,+BACVC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,wDACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,2CACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6DACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,2DAENJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,eACVC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,mFACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,uDAINJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,kBACVC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,0EACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,8DACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,gFAIVJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,yEAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,sCACVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,+BAAmC,iEAG7CC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,2FAGzCC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,wBAA4B,oFAGtCC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,kDAC/B,QAEVC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,yBAA6B,4FAM7CJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,0DAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,2KAIVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,gCAAoC,wDAG9CC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,gDAGzCC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,0BAA8B,oCAExCC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,4BAAgC,qDAE1CC,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,wBAA4B,8EAM5CJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,4EAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,yCACVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,4DACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,gCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6CACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,iCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,mDAIVJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,4EAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,2BACVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,8EACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,oEACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6DACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,wEACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6CAENJ,EAAAA,EAAAA,KAAA,SAAM,oKAKVA,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,mDAEtCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,6GAIVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6CACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,sCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,4EAENJ,EAAAA,EAAAA,KAAA,SAAM,qHAKVA,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRJ,EAAAA,EAAAA,KAAC+jB,EAAAA,cAAa,CACZriB,OAAO1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,4CAC3CkN,MAAM,SAAQlN,SACf,mWAQHJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,sEAItCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,0BAAgC,keAO1CJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,oBAA0B,+gBAUxCJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OAAO1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,4CAC3CkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,2HAIVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,mDACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,gCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,gEACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,mDAIVJ,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRC,EAAAA,EAAAA,MAAC0jB,EAAAA,cAAa,CACZriB,OACE1B,EAAAA,EAAAA,KAAA,KAAGkD,MAAO,CAAE01B,WAAY,UAAWx4B,SAAC,oDAEtCkN,MAAM,SAAQlN,SAAA,EAEdJ,EAAAA,EAAAA,KAACgY,GAAQ,CAAA5X,SAAC,wCACVJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAA,MAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,yCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,6CACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,sCACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,mEACJJ,EAAAA,EAAAA,KAAA,MAAAI,SAAI,yDAII,ECvEpB,GAnPuBV,IAKiB,IALhB,KACtBuB,EAAI,QACJ8Q,EAAO,aACPC,EAAY,QACZC,GACmBvS,EACnB,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClE2tB,EAAY8E,IAAiBzyB,EAAAA,EAAAA,WAAkB,GAEhDlN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRsyB,GAAc,GAGZ7oB,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9D05B,GAAc,EAAM,IAErBttB,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/C85B,GAAc,EAAM,GAIN,GACnB,IAEH,MAAM9lB,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAiBEoP,EAAOF,EALA,CACXkF,OAAQ7U,yDACRwY,cAAexY,8DAGoB,WAE/ByY,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAUxS,EACVyS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,iBACdvV,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAAC8hB,EAAYhiB,IAYf,OACE/R,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAC1C+N,EAAKgF,QAAWhF,EAAK2I,eAGrB9W,EAAAA,EAAAA,KAACwC,GAAgB,CAAC,cAAY,0BAAyBpC,UACrDC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACV2zB,IACA/zB,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,4BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,2BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,yBACbC,IAAKZ,EAAK2I,cACV9H,WAAW,GACXE,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,8BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAAC84B,GAAI,UAnFT94B,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KAuFR,ECpQPlD,GAAsB/I,EAAAA,QAAOC,GAAG;;;EAKhC4I,GAAmB7I,EAAAA,QAAOC,GAAG;;;;;;;;;;;;;;EAe7B+I,GAAgBhJ,EAAAA,QAAOC,GAAG;;EClB1Bm/B,GAAYj5B,EAAAA,GAAG;;;;EAMfk5B,GAASl5B,EAAAA,GAAG;;;;;;;;;;ECiBZm5B,IAvBiCt/B,EAAAA,OAAOC,GAAG;IACpDm/B;EAG0Bp/B,EAAAA,OAAOC,GAAG;IACpC8F,IAAA,IAAC,MAAEC,GAAqBD,EAAA,OAAmBI,EAAAA,GAAG;;;;WAIvCH,EAAMmG,OAAO;;GAErB;EAGkCnM,EAAAA,OAAOu/B,IAAI;IAC5CvzB,IAAA,IAAC,MAAEhG,GAAqBgG,EAAA,OAAmB7F,EAAAA,GAAG;;eAEnCH,EAAMmG,OAAO;gBACZnG,EAAMmG,OAAO;;GAE1B;EAGgCnM,EAAAA,OAAOu/B,IAAI;IAC1CljB,IAAA,IAAC,MAAErW,GAAqBqW,EAAA,OAAmBlW,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;GAGUu5B,GAA0Bx/B,EAAAA,OAAOu/B,IAAI;IAC9C9iB,IAAA,IAAC,MAAEzW,GAAqByW,EAAA,OAAmBtW,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;EAWUw5B,IARoBz/B,EAAAA,OAAOu/B,IAAI;IACxC7iB,IAAA,IAAC,MAAE1W,GAAqB0W,EAAA,OAAmBvW,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;EAGgCjG,EAAAA,OAAOu/B,IAAI;IAC1CrgB,IAAA,IAAC,MAAElZ,GAAqBkZ,EAAA,OAAmB/Y,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;GAWUy5B,IARqB1/B,EAAAA,OAAOu/B,IAAI;IACzC3b,IAAA,IAAC,MAAE5d,GAAqB4d,EAAA,OAAmBzd,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;EAGiCjG,EAAAA,OAAOu/B,IAAI;IAC3Cnb,IAAA,IAAC,MAAEpe,GAAqBoe,EAAA,OAAmBje,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;wBACbD,EAAMC,OAAO;GAClC;GAG8BjG,EAAAA,OAAOu/B,IAAI;IACxCjb,IAAA,IAAC,MAAEte,GAAqBse,EAAA,OAAmBne,EAAAA,GAAG;MAC5Ck5B;wBACkBr5B,EAAMC,OAAO;GAClC;EAG0BjG,EAAAA,OAAOu/B,IAAI;IACpCvT,IAAA,IAAC,MAAEhmB,GAAqBgmB,EAAA,OAAmB7lB,EAAAA,GAAG;;;;aAIrCH,EAAMC,OAAO;MACpBD,EAAME,WAAW;GACpB;kBCtFI,MAAMy5B,GAAe3/B,EAAAA,OAAOC,GAAG;IAClC8F,IAAA,IAAC,MAAEC,GAAqBD,EAAA,OAAmBI,EAAAA,GAAG;;;wBAG1BH,EAAMmG,OAAO;;aAExBnG,EAAMmG,OAAO;;;;GAIvB;EAGUyzB,GAAwB5/B,EAAAA,OAAOC,GAAG;IAC3C+L,IAAA,IAAC,MAAEhG,GAAqBgG,EAAA,OAAmB7F,EAAAA,GAAG;;;sBAG5BH,EAAMmG,OAAO;;uBAEZnG,EAAMmG,OAAO;;GAEjC;ECsBU0zB,GAAc,CACzBh/B,QAPQ,EAQRkH,MAPO,eAQPiN,QANE,o5DCxBE9I,GAAQnG,IAA6C,IAA5C,WAAEgP,GAAwBhP,EACvC,MAIMyO,EAAOF,EAJA,CACXwrB,wBAAyBn7B,iEAGU,WAErC,OAAK6P,EAAKsrB,yBAKRz5B,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,mBACbC,IAAKZ,EAAKsrB,wBACVzqB,WAAW,GACXrQ,OAAQ,CACNnE,OAAQg/B,GAAYh/B,OACpBkH,MAAO83B,GAAY93B,MACnBiN,QAAS6qB,GAAY7qB,QACrBzI,MAAOwI,GAETQ,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,aAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,KAvCEnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GAyCR,EAqCvB,GAjCgC8zB,KAC9B,MAAOC,EAAWC,GAAgB/R,IAAAA,SAAextB,OAAOgf,YAAc,MAEtEwO,IAAAA,WAAgB,KACd,MAAMzO,EAAeA,IAAMwgB,EAAav/B,OAAOgf,YAAc,MAE7D,OADAhf,OAAO2Q,iBAAiB,SAAUoO,GAC3B,IAAM/e,OAAO4Q,oBAAoB,SAAUmO,EAAa,GAC9D,IAEH,MAAOiC,EAAQC,IAAalV,EAAAA,EAAAA,WAAS,GAKrC,OACE/F,EAAAA,EAAAA,MAAAuG,EAAAA,SAAA,CAAAxG,SAAA,CACGib,IAAUrb,EAAAA,EAAAA,KAAC6F,GAAK,CAAC6I,WAJHA,IAAY4M,GAAU,MAKrCtb,EAAAA,EAAAA,KAACs5B,GAAY,CAAAl5B,UACXJ,EAAAA,EAAAA,KAACu5B,GAAqB,CAAAn5B,UACpBJ,EAAAA,EAAAA,KAACuH,EAAAA,eAAc,CACb,cAAY,UACZpC,MAAM,UACNqC,SAAS,UACTpD,MAAMpE,EAAAA,EAAAA,KAAC0zB,EAAAA,eAAc,IACrB9R,cAAe+X,EACflyB,QAdQ8T,IAAYD,GAAU,WAkBnC,ECgWP,GApa0B5b,IAAsE,IAArE,KAAEuB,EAAI,QAAE8Q,EAAO,aAAEC,EAAY,QAAEC,GAAiCvS,EACzF,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IACtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MA+BMpE,EAAOF,EANA,CACXkF,OAAQ7U,yDACRu7B,kBAAmBv7B,2DAIgB,WAErC,IAAK6P,EAAKgF,SAAWhF,EAAK0rB,kBACxB,OAAO75B,EAAAA,EAAAA,KAAA,UAGT,MAAM+W,EAAa,CACjBtD,SAAUxS,EACVyS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,qBACdvV,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YA9FoBlC,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAkFAyS,cAAeA,GAGjB0D,MAAOjD,GAKH6nB,GAAe95B,EAAAA,EAAAA,KAAC05B,GAAuB,IAEvCK,EAAY,CAChB,CACE91B,YAAa,SACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACg6B,GAAAA,YAAW,GAAK,QAAW,iBAC1CC,cAAe,EAACj6B,EAAAA,EAAAA,KAACi5B,GAAmB,GAAK,QAAW,SAEtD,CACEh1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACg6B,GAAAA,YAAW,GAAK,QAAW,iBAC1CC,cAAe,EAACj6B,EAAAA,EAAAA,KAACm5B,GAAuB,GAAK,QAAW,WAE1D,CACEl1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACk6B,GAAAA,OAAM,GAAK,QAAW,iBACrCD,cAAe,EAACj6B,EAAAA,EAAAA,KAACo5B,GAAmB,GAAK,QAAW,QAEtD,CACEn1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACg6B,GAAAA,YAAW,GAAK,QAAW,iBAC1CC,cAAe,EAACj6B,EAAAA,EAAAA,KAACq5B,GAAoB,GAAK,QAAW,gBAEvD,CACEp1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACm6B,GAAAA,QAAO,GAAK,QAAW,iBACtCF,cAAe,EAACj6B,EAAAA,EAAAA,KAACo5B,GAAmB,GAAK,QAAW,QAEtD,CACEn1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACg6B,GAAAA,YAAW,GAAK,QAAW,iBAC1CC,cAAe,EAACj6B,EAAAA,EAAAA,KAACm5B,GAAuB,GAAK,QAAW,WAE1D,CACEl1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACo6B,GAAAA,MAAK,GAAK,QAAW,iBACpCH,cAAe,EAACj6B,EAAAA,EAAAA,KAACi5B,GAAmB,GAAK,QAAW,SAEtD,CACEh1B,YAAa,gBACbmsB,YAAa,EAACpwB,EAAAA,EAAAA,KAACg6B,GAAAA,YAAW,GAAK,QAAW,iBAC1CC,cAAe,EAACj6B,EAAAA,EAAAA,KAACi5B,GAAmB,GAAK,QAAW,UA8GxD,OACE54B,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,EAC5CJ,EAAAA,EAAAA,KAACwC,GAAgB,CAAC,cAAY,iCAAgCpC,UAC5DC,EAAAA,EAAAA,MAAA,OAAK,cAAY,mCAAkCD,SAAA,EACjDJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,+BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,+BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OA4CTnP,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,wBACbC,IAAKZ,EAAK0rB,kBACV7qB,WAAW,GACXrQ,OAAQ,CACNoV,UAAW,QACXsmB,aAAcP,EACdQ,aAnPO,CAAC,eAAgB,eAAgB,kBAoPxCC,UAAWR,GAEb7qB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAA8E,IAA7E,MAAEjX,EAAK,eAAEoQ,GAAiD6G,EAC1D,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,0BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,YAMXnP,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,E,gBC9bpB,MAAM7c,GACI,QADJA,GAEI,QAFJA,GAGK,SAHLA,GAIK,SAGE+gC,GAAe7gC,EAAAA,QAAOC,GAAG;IAClC8F,IAA6C,IAA1CC,OAAO,WAAEE,IAAcH,EAC1B,OAAOI,EAAAA,GAAG;;;;;QAKND,EAAW;;2BAEQpG;;;2BAGAA;;;;2BAIAA;;;KAGtB;EAIQghC,GAAU9gC,EAAAA,QAAOC,GAAG;IAC7B+L,IAA6C,IAA1ChG,OAAO,WAAEE,IAAc8F,EAC1B,OAAO7F,EAAAA,GAAG;;QAEND,EAAW;KACd;EAIQ66B,IAAgB/gC,EAAAA,EAAAA,SAAOghC,GAAAA,GAAK;;;;;;;;EAmB5BhjB,GAAgBhe,EAAAA,QAAOC,GAAG;IACnC,IACOkG,EAAAA,GAAG;;;;;EAQD+X,GAAkBle,EAAAA,QAAOC,GAAG;IACrC,IACOkG,EAAAA,GAAG;;;;;;EAQDwZ,GAAU3f,EAAAA,QAAOC,GAAG;IAC7B,IACOkG,EAAAA,GAAG;;;2BAGarG;;;;2BAIAA;;;2BAGAA;;;;2BAIAA;;;;EC4M3B,GA/RwBmhC,KACtB,MASO7rB,EAAKoL,IAAU/T,EAAAA,EAAAA,UAAwB,MAgB9C,OAdAG,EAAAA,EAAAA,YAAU,KACUvN,WAChB,MAAMohB,QAAYxM,MAChBtP,oFACA,CAAEuP,MAAO,aAELrU,QAAa4gB,EAAIrM,OACvBoM,EAAO,gEAAwD3gB,EAAK,aAAa,EAEnF6gB,GAAY9O,OAAOxM,IACjBmN,QAAQnN,MAAM,uBAAwBA,EAAM,GAC5C,GACD,IAEEgQ,GAGH1O,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,EAC5CC,EAAAA,EAAAA,MAACsX,GAAa,CAAAvX,SAAA,EACZJ,EAAAA,EAAAA,KAAC6X,GAAe,CAAAzX,UACdJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,0BACbC,IAAKA,EACLC,WAAW,GACXrQ,OAAQ,CACNoX,WApCe,CACzB7T,MAAO,WACPyN,gBAAiB,OACjBxK,MAAO,QACPzD,MAAO,eACPkO,SAAU,GACVE,gBAAiBxR,qFAgCT4Q,QAAUnQ,GAA4BA,EAAMqB,SAE3CV,IAA8E,IAA7E,MAAEX,EAAK,eAAEoQ,GAAiDzP,EAC1D,OAAOX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,cAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAACsZ,GAAO,CAAAlZ,UACNC,EAAAA,EAAAA,MAACm6B,GAAY,CAAAp6B,SAAA,CAAC,gMAGGJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,oBAAwB,iRAI/CJ,EAAAA,EAAAA,KAAA,SAAM,8PAGNA,EAAAA,EAAAA,KAAA,SAAM,wJAEwDA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KAC5EA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,mBAAwB,mFACTJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,4BAAgC,4ZAK1BJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KAClEA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,gBAAoB,6TAItBJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kBAAsB,qQAGGJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KACnEA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,gBAAoB,uHAC2BJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KACrEA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,wBAA4B,wIAC2CJ,EAAAA,EAAAA,KAAA,SAAO,KACtFA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kBAAsB,0OAG/BJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,mEAA+DA,EAAAA,EAAAA,KAAA,SAAO,KACzFA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,mEAAyE,IAAI,4YAKlDJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KACzDA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,6BAAkC,+XAIsCJ,EAAAA,EAAAA,KAAA,SAAO,KACxFA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,8BAAmC,kQAGPJ,EAAAA,EAAAA,KAAA,UAC5CA,EAAAA,EAAAA,KAAA,SAAM,0GACqBA,EAAAA,EAAAA,KAAA,UAC3BA,EAAAA,EAAAA,KAAA,SAAM,qUAGkEA,EAAAA,EAAAA,KAAA,UACxEA,EAAAA,EAAAA,KAAA,SAAM,8GACkBA,EAAAA,EAAAA,KAAA,UACxBA,EAAAA,EAAAA,KAAA,SAAM,qoBAO2CA,EAAAA,EAAAA,KAAA,UACjDA,EAAAA,EAAAA,KAAA,SAAM,mfAK0EA,EAAAA,EAAAA,KAAA,UAChFA,EAAAA,EAAAA,KAAA,SAAM,qbAKOA,EAAAA,EAAAA,KAAA,UACbA,EAAAA,EAAAA,KAAA,SAAM,wbAKcA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACK,EAAAA,EAAAA,MAACo6B,GAAO,CAAAr6B,SAAA,CACvC,IAAI,iCAC0B,OACtB,IAAI,q6BAW2DJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KACxFA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,gBAAqB,wEACf,KACfJ,EAAAA,EAAAA,KAAC06B,GAAa,CAACG,GAAG,kBAAiBz6B,SAAC,kDAEnB,IAAI,qPAG6CJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KAChFA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,gCAAqC,2OAGzBJ,EAAAA,EAAAA,KAAA,SAAM,wDAAoDA,EAAAA,EAAAA,KAAA,SAAM,oIAEhDA,EAAAA,EAAAA,KAAA,SAAM,4CAA0C,KACrFA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAO,KACdA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,+DAAoE,gTAIhDJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,geAMxBA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,y2BAUuBA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,4SAI3CA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,iUAIxBA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,8BAAmC,0aAMvEJ,EAAAA,EAAAA,KAAA,SAAM,ikBAQNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,+BAAoC,qEAE7CJ,EAAAA,EAAAA,KAAA,SAAM,wdAONA,EAAAA,EAAAA,KAAA,SAAM,2RAGqBA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,kBAAuB,yWAIW,KACpFJ,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,4BAAiC,ksCAexDJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,uQAINA,EAAAA,EAAAA,KAAA,SAAM,KAACA,EAAAA,EAAAA,KAAA,UACPA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sBAA2B,8kCAiB1CJ,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,QAhQAtW,EAAAA,EAAAA,KAAA,SAiQC,ECvSdvG,GACI,QADJA,GAEI,QAFJA,GAGK,SAHLA,GAIK,SAGE+gC,GAAe7gC,EAAAA,QAAOC,GAAG;IAClC8F,IAA6C,IAA1CC,OAAO,WAAEE,IAAcH,EAC1B,OAAOI,EAAAA,GAAG;;;;;QAKND,EAAW;2BACQpG;;;2BAGAA;;;;2BAIAA;;;KAGtB;EAIQihC,GAAgB/gC,EAAAA,QAAO6uB,CAAC;;;;;;;EASxBsS,GAAenhC,EAAAA,QAAOC,GAAG;;;;;;;;;;;;;;;;EA6DzBmhC,GAAQphC,EAAAA,QAAOs6B,KAAK;;;;;;;;;EAWpB+G,GAAWrhC,EAAAA,QAAOshC,EAAE;;;;;;EAiBpBlB,IATapgC,EAAAA,QAAOu/B,IAAI;IACjCvzB,IAA6C,IAA1ChG,OAAO,WAAEE,IAAc8F,EAC1B,OAAO7F,EAAAA,GAAG;;QAEND,EAAW;KACd;EAIoBlG,EAAAA,QAAOuhC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BrBT,GAAU9gC,EAAAA,QAAOC,GAAG;IAC7Boc,IAA6C,IAA1CrW,OAAO,WAAEE,IAAcmW,EAC1B,OAAOlW,EAAAA,GAAG;;QAEND,EAAW;KACd;EAIQ8X,GAAgBhe,EAAAA,QAAOC,GAAG;IACnC,IACOkG,EAAAA,GAAG;;;;;EAQD+X,GAAkBle,EAAAA,QAAOC,GAAG;IACrC,IACOkG,EAAAA,GAAG;;;;;;EAQDwZ,GAAU3f,EAAAA,QAAOC,GAAG;IAC7B,IACOkG,EAAAA,GAAG;;;2BAGarG;;;;2BAIAA;;;2BAGAA;;;;2BAIAA;;;;EAOd0hC,GAAaxhC,EAAAA,QAAOyhC,EAAE;;;;uBAIZ3hC;;;;uBAIAA;;;;;uBAKAA;;;;EAMV4hC,GAAiB1hC,EAAAA,QAAOkiB,EAAE;;EColBvC,GAvyB0Byf,KACxB,MAQOvsB,EAAKoL,IAAU/T,EAAAA,EAAAA,UAAwB,MAgB9C,OAdAG,EAAAA,EAAAA,YAAU,KACUvN,WAChB,MAAMohB,QAAYxM,MAChBtP,oFACA,CAAEuP,MAAO,aAELrU,QAAa4gB,EAAIrM,OACvBoM,EAAO,gEAAwD3gB,EAAK,aAAa,EAEnF6gB,GAAY9O,OAAOxM,IACjBmN,QAAQnN,MAAM,uBAAwBA,EAAM,GAC5C,GACD,IAEEgQ,GAGH1O,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,EAC5CC,EAAAA,EAAAA,MAACsX,GAAa,CAAAvX,SAAA,EACZJ,EAAAA,EAAAA,KAAC6X,GAAe,CAAAzX,UACdJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,4BACbC,IAAKA,EACLC,WAAW,GACXrQ,OAAQ,CACNoX,WAnCe,CACzB7T,MAAO,WACPyN,gBAAiB,OACjBxK,MAAO,QACPzD,MAAO,iBACPkO,SAAU,GACVE,gBAAiBxR,qFA+BT4Q,QAAUnQ,GAA4BA,EAAMqB,SAE3CV,IAA8E,IAA7E,MAAEX,EAAK,eAAEoQ,GAAiDzP,EAC1D,OAAOX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,cAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAACsZ,GAAO,CAAAlZ,UACNC,EAAAA,EAAAA,MAACm6B,GAAY,CAAAp6B,SAAA,CAAC,0KAGZJ,EAAAA,EAAAA,KAAA,SAAM,8TAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,iBACTJ,EAAAA,EAAAA,KAAA,SAAM,gKAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,+SAKNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,0BAA0B0b,OAAO,SAASsgB,IAAI,sBAAqBn7B,SAAC,6BAGxFJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sCACTJ,EAAAA,EAAAA,KAAA,SAAM,+CAENA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,yNAKhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,oGAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,iKAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,2KAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,mOAMlBJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sEACTJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC86B,GAAY,CAAA16B,UACXC,EAAAA,EAAAA,MAAC06B,GAAK,CAAA36B,SAAA,EACJC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,kBACXJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,6eAUbC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,mCACXC,EAAAA,EAAAA,MAAC05B,GAAS,CAAA35B,SAAA,CAAC,sVAMTJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,wKAMZC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,oBACXC,EAAAA,EAAAA,MAAC05B,GAAS,CAAA35B,SAAA,CAAC,kIAEuCJ,EAAAA,EAAAA,KAAA,UAChDK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,aAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,qCAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,kFAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,wCAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,0DAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,oDAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,oJAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,sEAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,2MAKhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,qEAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,+LAKhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,uCAItBC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,gBACXJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,udASbC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,6BACXJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,klBAajBJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,uDACTJ,EAAAA,EAAAA,KAAA,SAAM,kYAMNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,sNAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,gEAENA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,gZAOhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,gJAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,4JAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,0KAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,m3BAahBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,qXAOhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,4FAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,mfAShBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,mIAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,0IAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,uZAQlBJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,wDACTJ,EAAAA,EAAAA,KAAA,SAAM,6MAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,oHAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,uCAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,6BAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,yBAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,+HAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,kFAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,kEAIlBJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,8DACTJ,EAAAA,EAAAA,KAAA,SAAM,yDAC+CA,EAAAA,EAAAA,KAAA,UACrDA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kBAAsB,4KAIhCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,mBAAuB,8LAIjCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,uCAA2C,mOAKrDC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,4BAAgC,kOAK1CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kCAAsC,8OAKhDC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,+BAAmC,yVAM7CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,yBAA6B,qPAKvCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,gCAAoC,mIAG9CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,cAAkB,yJAI5BC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,8BAAkC,4SAM5CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBAA0B,2QAMtCJ,EAAAA,EAAAA,KAAA,SAAM,mKAEgEA,EAAAA,EAAAA,KAAA,UACtEA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,wFAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,8DAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,wKAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,sFAIlBJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sDACTJ,EAAAA,EAAAA,KAAA,SAAM,+XAKNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,+BAAmC,+JAI7CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBAA0B,oGAGpCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sDAA0D,wNAKpEC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,mEAAuE,4HAIjFC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,qBAAyB,qGAGnCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,kBAAsB,mJAKlCJ,EAAAA,EAAAA,KAAA,SAAM,gLAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,sKAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,yJAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,+FAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,kJAIhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,2UAOhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,mJAKlBJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sEACTJ,EAAAA,EAAAA,KAAA,SAAM,4OAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,8CAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,+DAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,yDAChBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,yEAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,0DAElBJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,0DACTJ,EAAAA,EAAAA,KAAA,SAAM,0RAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,uDACTJ,EAAAA,EAAAA,KAAA,SAAM,yJAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,6EAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,kEAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,6MAMlBJ,EAAAA,EAAAA,KAAA,SAAM,0RAKNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,8DACTJ,EAAAA,EAAAA,KAAA,SAAM,yMAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,gpBAUzCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2DAA+D,gJAIzEC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,8DAAkE,0QAM5EC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,YAAgB,kNAI1BC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,cAAkB,25BAa5BC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,yBAA6B,sPAMzCJ,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,6DACTJ,EAAAA,EAAAA,KAAA,SAAM,gTAINA,EAAAA,EAAAA,KAAA,SAAM,qkBAONA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,+CACTJ,EAAAA,EAAAA,KAAA,SAAM,uNAGNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,uFAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,gEAGhBJ,EAAAA,EAAAA,KAACq7B,GAAc,CAAAj7B,SAAC,mEAIlBJ,EAAAA,EAAAA,KAAA,SAAM,2VAKNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,sDACTJ,EAAAA,EAAAA,KAAA,SAAM,qeAM0DA,EAAAA,EAAAA,KAAA,UAChEA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,yBACTJ,EAAAA,EAAAA,KAAA,SAAM,iFACNA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,2BAA+B,4hBASzCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,0BAA8B,6dAQxCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBAA0B,iUAOtCJ,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC06B,GAAK,CAAA36B,SAAA,EACJC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,kBACXJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,UACRJ,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,gCAA+Ba,SAAC,iCAKxDC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,cACXJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,UACRJ,EAAAA,EAAAA,KAAC06B,GAAa,CACZn7B,KAAK,2BACL0b,OAAO,SACPsgB,IAAI,sBAAqBn7B,SAC1B,mCAKLC,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,gCACXC,EAAAA,EAAAA,MAAC05B,GAAS,CAAA35B,SAAA,CAAC,+BAETJ,EAAAA,EAAAA,KAAA,SAAM,YACNA,EAAAA,EAAAA,KAAA,SAAM,uBAENA,EAAAA,EAAAA,KAAA,SAAM,qCAGVK,EAAAA,EAAAA,MAAC26B,GAAQ,CAAA56B,SAAA,EACPJ,EAAAA,EAAAA,KAAC+5B,GAAS,CAAA35B,SAAC,kBACXC,EAAAA,EAAAA,MAAC05B,GAAS,CAAA35B,SAAA,CAAC,oBACOJ,EAAAA,EAAAA,KAAA,UAChBA,EAAAA,EAAAA,KAAC06B,GAAa,CACZn7B,KAAK,wCACL0b,OAAO,SACPsgB,IAAI,sBAAqBn7B,SAC1B,2CAGDJ,EAAAA,EAAAA,KAAA,mBAINA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAK,EAAAA,EAAAA,MAAC86B,GAAU,CAAA/6B,SAAA,EACTC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBAA0B,uSAKpCC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,6BAAiC,+PAK3CC,EAAAA,EAAAA,MAACg7B,GAAc,CAAAj7B,SAAA,EACbJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBAA0B,uNAKtCJ,EAAAA,EAAAA,KAAA,SAAM,2EACmE,KACzEA,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,kDAAiDa,UACnEJ,EAAAA,EAAAA,KAAA,KAAAI,SAAG,+CACY,IAAI,8JAGrBJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,gBACTJ,EAAAA,EAAAA,KAAA,SAAM,6OAE+D,KACrEA,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,kDAAiDa,UACnEJ,EAAAA,EAAAA,KAAA,KAAAI,SAAG,+CACY,KACjBJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,oKAEuE,KAC7EA,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,mCAAkCa,UACpDJ,EAAAA,EAAAA,KAAA,KAAAI,SAAG,iCACY,KACjBJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,SAAM,2GAEY,KAClBA,EAAAA,EAAAA,KAAC06B,GAAa,CAACn7B,KAAK,gCAA+Ba,SAAC,2BAEnC,IAAI,KAClB,KACHJ,EAAAA,EAAAA,KAAC06B,GAAa,CACZn7B,KAAK,2BACL0b,OAAO,SACPsgB,IAAI,sBAAqBn7B,SAC1B,6BAEgB,IAAI,WAErBJ,EAAAA,EAAAA,KAAA,UAAAI,SAAQ,sBACRJ,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACy6B,GAAO,CAAAr6B,SAAC,+BACTJ,EAAAA,EAAAA,KAAA,SAAM,oSAOZA,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,QAzwBAtW,EAAAA,EAAAA,KAAA,SA0wBC,ECrzBdvG,GAAwB,QAAxBA,GAAyC,QAAzCA,GAA2D,SAA3DA,GAA8E,SAEvEke,GAAgBhe,EAAAA,QAAOC,GAAG;IACnC,IACOkG,EAAAA,GAAG;;;;;EAQD+X,GAAkBle,EAAAA,QAAOC,GAAG;IACrC,IACOkG,EAAAA,GAAG;;;;;;ECTR07B,IDiBiB7hC,EAAAA,QAAOC,GAAG;IAC7B,IACOkG,EAAAA,GAAG;;;2BAGarG;;;;2BAIAA;;;2BAGAA;;;;2BAIAA;;;;ECjCNgiC,EAAAA,iBAAiB;;;;GAqEtC,GA/DmCC,KACjC,MAAO3sB,EAAKoL,IAAU/T,EAAAA,EAAAA,UAAwB,MAiB9C,OAfAG,EAAAA,EAAAA,YAAU,KACUvN,WAChB,MAAMohB,QAAYxM,MAChBtP,kFACA,CACEuP,MAAO,aAGLrU,QAAa4gB,EAAIrM,OACvBoM,EAAO,8DAA6D3gB,EAAK,aAAa,EAExF6gB,GAAY9O,OAAOxM,IACjBmN,QAAQnN,MAAM,uBAAwBA,EAAM,GAC5C,GACD,KAEDiB,EAAAA,EAAAA,KAAA4G,EAAAA,SAAA,CAAAxG,SACG2O,IACC/O,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CJ,EAAAA,EAAAA,KAAC2X,GAAa,CAAAvX,UACZC,EAAAA,EAAAA,MAACwX,GAAe,CAAAzX,SAAA,EACdJ,EAAAA,EAAAA,KAACw7B,GAAY,KACbx7B,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,2BACbC,IAAKA,EACLC,WAAW,GACXE,QAAUnQ,GAA4BA,EAAMqB,SAE3CV,IAA8E,IAA7E,MAAEX,EAAK,eAAEoQ,GAAiDzP,EAC1D,OAAOX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OACTlP,UAEFJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,yBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OACTlP,SAED+O,GAEJ,YAOZ,ECwCP,GAvG8BwsB,KAC5B,MAKMxtB,EAAOF,EALA,CACXmF,OAAQ9U,yDACR6lB,YAAa7lB,wDAGsB,WAC/B8lB,EAAqB,CACzBliB,MAAO,WACPyN,gBAAiB,OACjBxK,MAAO,gBACPzD,MAAO,sBACPkO,SAAU,iEACVE,gBAAiBxR,oFAGnB,OAAQ6P,EAAKiF,QAAWjF,EAAKgW,aAK3B9jB,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,OAAMC,SAAA,EACzCC,EAAAA,EAAAA,MAACsX,GAAa,CAAAvX,SAAA,EACZJ,EAAAA,EAAAA,KAAC6X,GAAe,CAAAzX,UACdJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,iCACbC,IAAKZ,EAAKiF,OACVpE,WAAW,GACXrQ,OAAQ,CACNoX,WAAYqO,GAEdlV,QAAUnQ,GAA4BA,EAAMqB,SAE3CV,IAA8E,IAA7E,MAAEX,EAAK,eAAEoQ,GAAiDzP,EAC1D,OAAOX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,2BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAACsZ,GAAO,CAAAlZ,UACNJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfE,IAAKZ,EAAKgW,YACVnV,WAAW,GACXrQ,OAAQ,CACNoX,WAAYqO,GAEdlV,QAAUnQ,GAA4BA,EACtC+P,aAAc,eAAe1O,SAE5BuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,oBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,UAKTnP,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,QAjFftW,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,OAAMC,UACzCJ,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KAkFvB,ECIH,GAxGiCg2B,KAC/B,MAKMztB,EAAOF,EALA,CACXmF,OAAQ9U,yDACR6lB,YAAa7lB,wDAGsB,WAE/B8lB,EAAqB,CACzBliB,MAAO,WACPyN,gBAAiB,OACjBxK,MAAO,gBACPzD,MAAO,sBACPkO,SAAU,iEACVE,gBAAiBxR,oFAGnB,OACE+B,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,OAAMC,SAAA,CACvC+N,EAAKiF,QAAWjF,EAAKgW,aAGrB9jB,EAAAA,EAAAA,MAACsX,GAAa,CAAAvX,SAAA,EACZJ,EAAAA,EAAAA,KAAC6X,GAAe,CAAAzX,UACdJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,oCACbC,IAAKZ,EAAKiF,OACVpE,WAAW,GACXrQ,OAAQ,CACNoX,WAAYqO,GAEdlV,QAAUnQ,GAA4BA,EAAMqB,SAE3CV,IAA8E,IAA7E,MAAEX,EAAK,eAAEoQ,GAAiDzP,EAC1D,OAAOX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,8BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAACsZ,GAAO,CAAAlZ,UACNJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfE,IAAKZ,EAAKgW,YACVnV,WAAW,GACXrQ,OAAQ,CACNoX,WAAYqO,GAEdlV,QAAUnQ,GAA4BA,EACtC+P,aAAc,kBAAkB1O,SAE/BuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,uBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,UAzETnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA+EtB5F,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,EC3GP+N,GAAyB1qB,EAAAA,QAAOC,GAAG;;;;;;;;EAUnCiiC,GAAcliC,EAAAA,QAAOC,GAAG;;;;SAI5B8F,IAAA,IAAC,MAAEC,GAAOD,EAAA,OAAmBC,EAAMmG,OAAO,eAAe;;EAIrDg2B,GAAoBniC,EAAAA,QAAOC,GAAG;;;;ECpB9BmiC,GAAyC,CACpD,SAAU,QACV,SAAU,QACV,4BAA6B,MAC7B,uCAAwC,OACxC,aAAc,aACd,kCAAmC,QCiiBrC,GA3f0Br8B,IAQkB,IARjB,WACzBs8B,EAAU,QACVjqB,EAAO,aACPC,EAAY,YACZiqB,EAAW,UACXC,EAAS,gBACT5zB,EAAe,QACf2J,GACuBvS,EACvB,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,IACzC+1B,EAAqBC,IAA0Bh2B,EAAAA,EAAAA,UACpDkC,GAAmB,KAEd+zB,EAAsBC,IAA2Bl2B,EAAAA,EAAAA,UAAiB61B,GAAe,IACjFM,EAAaC,IAAkBp2B,EAAAA,EAAAA,UAAiB81B,GAAa,IAC7DO,EAAaC,IAAkBt2B,EAAAA,EAAAA,eAAkCnB,IACjE03B,EAAiBC,IAAsBx2B,EAAAA,EAAAA,UAAiB,KACxDua,EAAUkc,IAAez2B,EAAAA,EAAAA,UAAc,CAAC,IACxCqoB,EAAUqO,IAAe12B,EAAAA,EAAAA,UAAiB,KAC1C22B,EAAQC,IAAa52B,EAAAA,EAAAA,UAAiB,KAE7CG,EAAAA,EAAAA,YAAU,KACR,IAAKwL,GAASpK,aAAc,OAC5B,IAAIs1B,GAAU,EACd,MAAMzwB,EAAuBxT,UAC3B,MAAMI,EAAQuR,aAAa7L,QAAQ,eACnC,IACE,MAAMsN,QAAiB1E,EAAmBqK,EAAQpK,aAAczO,EAAeE,GAC/EgjC,GAAwBhwB,EAAS5S,MAAQ,IAAI6S,QAAQC,WACrDgwB,EAAwBlwB,EAAS5S,KAAKmS,QACtC6wB,EAAepwB,EAAS5S,KAAK0Z,QAAQzU,GAA+B,UAAnBA,EAAQU,SAAoBwM,OAC/E,CAAE,MAAO5M,GACPmN,QAAQnN,MAAM,mCAAoCA,EACpD,GAEFyN,IAAuBjB,MAAMW,QAAQnN,OACrC,MAAMyH,EAAaC,aAAY,KACzBw2B,GAASzwB,IAAuBjB,MAAMW,QAAQnN,MAAM,GACvD,KACH,MAAO,KACLk+B,GAAU,EACVt2B,cAAcH,EAAW,CAC1B,GACA,CAACuL,GAASpK,gBAEbpB,EAAAA,EAAAA,YAAU,KACR,MAAM22B,EC1FyB50B,KACjC,IAAKA,GAA8C,IAA3BA,EAAgBqD,OACtC,OAGF,MAAMwxB,EAAa70B,EAAgB4K,QAAQkqB,GAAyB,UAAhBA,EAAKj+B,SAEzD,OAA0B,IAAtBg+B,EAAWxxB,QAIfwxB,EAAW5U,MAAK,CAACC,EAAGC,KAClB,MAAM4U,EAAQ7U,EAAE8U,gBAAgB5U,WAAaF,EAAE8U,gBAAgB1O,WAAa,IAAI9d,KAAK,GAErF,OADc2X,EAAE6U,gBAAgB5U,WAAaD,EAAE6U,gBAAgB1O,WAAa,IAAI9d,KAAK,IACxEO,UAAYgsB,EAAMhsB,SAAS,IAGnC8rB,EAAW,SAVlB,CAUoB,EDyEJI,CAAmBpB,GAGjC,GAFAO,EAAeQ,GACfN,EAAmBH,GAAae,UAAY,IACxCf,EAAa,CACf,MAAMW,EAAOK,mBAAmB5wB,KAAKC,UAAU2vB,EAAYa,iBAC3DT,EAAYO,GACZN,EAAYL,GAAahO,UAAY,IACrCuO,EAAUP,EAAYiB,KAAO,GAC/B,IACC,CAACvB,IACJ,MAAMjjC,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAyBEoP,EAAOF,EAbA,CACXkF,OAAQ7U,yDACR8U,OAAQ9U,yDACR2pB,SAAU3pB,4DACVq/B,YAAar/B,gEASsB,WAE/BoR,EAAa,CACjBxN,MAAO,gBACPyN,gBAAiB,QACjBjO,MAAO,uBACPojB,MACE9kB,EAAAA,EAAAA,KAAA,OAAAI,SAAK,gIAKPgF,MAAO9G,sFAGPiiB,YAAa,sBACbuV,YAAY91B,EAAAA,EAAAA,KAAC0zB,EAAAA,eAAc,IAC3B1yB,WAAY,yCAGR+V,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU,WACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,kCACdvV,MAAO,aACPzB,cAAe,QAEfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAIfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGN6rB,GAAiBpqB,EAAAA,EAAAA,UACrB,IAAM,CACJ,CACE9R,MAAO,kBACPC,YAAa,wBACbyC,MAAMpE,EAAAA,EAAAA,KAAC2Z,EAAAA,QAAO,IACdngB,KAAMwiC,GAAc,GAEtB,CACEt6B,MAAO,mBACPC,YAAa,yBACbyC,MAAMpE,EAAAA,EAAAA,KAAC69B,EAAAA,KAAI,IACXrkC,KAAMyiC,GAAeI,GAEvB,CACE36B,MAAO,yBACPC,YAAa,6BACbyC,MAAMpE,EAAAA,EAAAA,KAAC89B,EAAAA,KAAI,IACXtkC,KAAM+iC,KAGV,CAACP,EAAYC,EAAaI,EAAsBE,IAGlD,OACEv8B,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAC1C+N,EAAKgF,QAAWhF,EAAKiF,QAAWjF,EAAK8Z,UAAa9Z,EAAKwvB,aAGvD39B,EAAAA,EAAAA,KAACwC,EAAgB,CAAApC,UAEfC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,qBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAIoD,IAJnD,MACA5G,EAAK,eACLoQ,GAEgCxJ,EAChC,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,uBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMTnP,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,qBACbC,IAAKZ,EAAKiF,OACVpE,WAAW,GACXrQ,OAAQ,CAAEoX,WAAYrG,GACtBR,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,uBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKPnP,EAAAA,EAAAA,KAAC87B,GAAiB,CAAA17B,UAChBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,qCACbC,IAAKZ,EAAKwvB,YACV3uB,WAAW,GACXrQ,OAAQ,CACNo/B,YAAY,EACZvkC,KAAMokC,GAER1uB,QAAUnQ,GAA4BA,EAAMqB,SAE3CgW,IAIoD,IAJnD,MACArX,EAAK,eACLoQ,GAEgCiH,EAChC,OAAOrX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,sCAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKP9O,EAAAA,EAAAA,MAACw7B,GAAW,CAAAz7B,SAAA,EACVJ,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+qB,QAAQ,OAAO3pB,WAAW,mBAAkBzG,SAAC,qCAGlC,IAAhB67B,GACC57B,EAAAA,EAAAA,MAACgkB,GAAsB,CAAAjkB,SAAA,EASrBJ,EAAAA,EAAAA,KAACmqB,GAAa,CACZlE,SAAU,WACVvkB,MAAO,4BACP0C,MAAMpE,EAAAA,EAAAA,KAACg+B,EAAAA,gBAAe,IACtB9X,QAAS,wBACTC,WAAY,qBACZC,cAAc,IAEfqW,IACCz8B,EAAAA,EAAAA,KAACmqB,GAAa,CACZlE,SAAU,WACVvkB,MAAO,wBAAwBi7B,IAC/Bv4B,MAAMpE,EAAAA,EAAAA,KAAC89B,EAAAA,KAAI,IACX5X,QAAS,mBACTze,QAASA,KACP4e,GAAkBrlB,WAChB,0CAA0C+6B,GAAetN,IAAa,KACtE,CAAE9N,SAAUA,EAAUoc,OAAQA,GAC/B,EAEH3W,cAAc,QAKpB/lB,EAAAA,EAAAA,MAACgkB,GAAsB,CAAAjkB,SAAA,EACrBJ,EAAAA,EAAAA,KAACmqB,GAAa,CACZlE,SAAU,WACVvkB,MAAO,8BACP0C,MAAMpE,EAAAA,EAAAA,KAAC0zB,EAAAA,eAAc,IACrBxN,QAAS,sBACTC,WAAY,yCACZC,cAAc,KAEhBpmB,EAAAA,EAAAA,KAACmqB,GAAa,CACZlE,SAAU,WACVvkB,MAAO,4BACP0C,MAAMpE,EAAAA,EAAAA,KAACg+B,EAAAA,gBAAe,IACtB9X,QAAS,wBACTC,WAAY,qBACZC,cAAc,WA2BtBpmB,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,wBACbC,IAAKZ,EAAK8Z,SACVjZ,WAAW,GACXE,QAAUnQ,GAA4BA,EAAMqB,SAE3CiW,IAIoD,IAJnD,MACAtX,EAAK,eACLoQ,GAEgCkH,EAChC,OAAOtX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,0BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,YA7PXnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KAoQR,EEjiBPq4B,GAAsBtkC,EAAAA,QAAOC,GAAG;;;;;;;;;;;;;;;;;;;;EAqBhC+I,GAAgBhJ,EAAAA,QAAOC,GAAG;;ECC1BskC,GAAqBx+B,IAIE,IAJD,QACjCqS,EAAO,aACPC,EAAY,QACZC,GACevS,EACf,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACX,mBAAEpE,GAAuB8D,KAC/BhC,EAAAA,EAAAA,YAAU,QAAU,CAAC9B,IACrB,MAAO+M,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAOEoP,EAAOF,EAJA,CACXkF,OAAQ7U,0DAG2B,WAS/BiV,GAAgBC,EAAAA,EAAAA,UACpB,KAAM,CACJC,SAAU,OACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,eACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd3S,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OAAK5D,EAAKgF,QAIRnT,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CJ,EAAAA,EAAAA,KAACi+B,GAAmB,CAAC,cAAY,0BAAyB79B,UACxDC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQ4U,EACRrE,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAACwZ,GAAY,YA3CZxZ,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA+CX,EC/MPkS,GAAQne,EAAAA,QAAOC,GAAG;IAC3B8F,IAA6D,IAA1DC,OAAO,OAAEC,EAAM,WAAEC,EAAU,OAAEiG,IAAUpG,EAC1C,OAAOI,EAAAA,GAAG;QACND,EAAW;eACJD,EAAO;aACTkG,EAAO;KACf;ECiUL,ID7TqBnM,EAAAA,QAAOC,GAAG;;;;;;EAQRD,EAAAA,QAAOC,GAAG;;;;;;;;ECSL8F,IAAsE,IAArE,QAAEqS,EAAO,aAAEC,EAAY,QAAEC,GAAyBvS,EAC7E,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,IACzC5L,EAAQ2jC,IAAa/3B,EAAAA,EAAAA,WAAkB,IACvCoF,EAAS4yB,IAAch4B,EAAAA,EAAAA,UAAiB,IACzClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,CAAC/X,IAEJ,MAAMua,EAAgBnD,ICtDU5Y,OAChCE,EACA0Y,KAEA,MAAMhQ,EAAM,mFAAsFgQ,IASlG,aAPuBvY,EAAAA,EAAUglC,OAA6Bz8B,EAAK,CACjErI,QAAS,CACP,eAAgB,mBAChBL,oBAIYM,IAAI,ED0ClB8kC,CAAmBplC,EAAe0Y,GAC/BvG,MAAK,KACJ+yB,EAAW,qCACXD,GAAU,EAAK,IAEhB5yB,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/Cq/B,EAAW,iCACXD,GAAU,EAAK,GACf,EAGAnpB,EAAeA,CAACpD,EAAmBzS,KACvCwS,GAAiBzY,EAAe0Y,EAAWzS,GACxCkM,MAAK,KACJ8yB,GAAU,GACVC,EAAW,oCAAoC,IAEhD7yB,OAAOxM,IACNo/B,GAAU,GACVjyB,QAAQnN,MAAM,gCAAiCA,GAC/Cq/B,EAAW,gCAAgC,GAC3C,EAGArrB,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OAGjD,OAFAwyB,GAAU,QACVC,EAAW,wCAIb,IAAIG,EAAe,EACfC,EAAe,EAEnB,MAAMC,EAAajtB,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAE9Eg+B,EAAW3zB,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,KACJkzB,GAAc,IAEfhzB,OAAOxM,IACNy/B,IACAtyB,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,IAElE+T,SAAQ,KACHyrB,EAAeC,IAAiBC,EAAW9yB,SAC7CwyB,GAAU,GAERC,EADmB,IAAjBI,EACS,yCACFD,EAAe,EACb,WAAWA,oBAA+BC,WAE1C,kCAEf,GACA,GACJ,EAQErwB,EAAOF,EALA,CACXkF,OAAQ7U,yDACRkT,cAAelT,iEAGoB,WAW/BogC,GAA4BlrB,EAAAA,EAAAA,UAChC,KAAM,CACJsB,KAAM,uBACNC,aAAcA,EACdC,aAAcA,EACdC,YAAalC,EACbvB,cAAeA,KAEjB,CAACc,IAGGyE,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU/K,GAAMzH,KAChByS,SAAU3B,GAAS2B,SACnBC,YAAapC,GAAyBC,GACtC7J,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,gBACdvV,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAGfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfjD,cAAe,CACbsD,KAAM,uBACNC,aAAcA,EACdC,aAAcA,EACdC,YAAalC,EACbvB,cAAeA,GAEjB0D,MAAOjD,KAET,CAACK,IAGH,OACEtS,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAC1C+N,EAAKgF,QAAWhF,EAAKqD,eAGrBnR,EAAAA,EAAAA,MAACmC,EAAgB,CAAApC,SAAA,EACfJ,EAAAA,EAAAA,KAAC6F,GAAAA,MAAK,CACJ2B,SAAS,WACTm3B,SACE3+B,EAAAA,EAAAA,KAACuH,EAAAA,eAAc,CAACC,SAAS,UAAUrC,MAAM,OAAOsC,QAASA,IAAM02B,GAAU,KAE3Ex8B,YAAa6J,EACbqK,aAAc,WAAe,EAC7BtV,KAAK,QACLmB,MAAM,eACN2Z,OAAQ7gB,IAGR8X,GAuFAjS,EAAAA,EAAAA,MAACmF,EAAY,CAAApF,SAAA,EACXJ,EAAAA,EAAAA,KAACM,EAAAA,sBAAqB,CAACC,KAAK,WAC5BP,EAAAA,EAAAA,KAACyF,EAAI,CAAArF,SAAC,kDAxFRC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACZJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,0BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAIoD,IAJnD,MACA5G,EAAK,eACLoQ,GAEgCxJ,EAChC,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,4BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAAC8X,GAAK,CAAA1X,SAAC,0BACPJ,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,2BACbC,IAAKZ,EAAKqD,cACVxC,WAAW,GACXrQ,OAAQ,CAAEigC,kBAAmBF,GAC7BxvB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,6BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,aAhGbnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA6GR,GE/TPi5B,GAAmBllC,EAAAA,QAAOC,GAAG;IACtC8F,IAAA,IAAC,MAAEC,GAAOD,EAAA,OAAmBI,EAAAA,GAAG;;eAErBH,EAAMmG,OAAO;;;WAGjBnG,EAAMmG,OAAO;;GAErB;EAGUg5B,GAAiBnlC,EAAAA,QAAOC,GAAG;;;;;;;MAOlC+L,IAAA,IAAC,MAAEhG,GAAOgG,EAAA,OAAmB7F,EAAAA,GAAG;;;aAGzBH,EAAMmG,OAAO;KACrB;;EAIQi5B,GAAiBplC,EAAAA,QAAOC,GAAG;IACpCoc,IAAA,IAAC,MAAErW,GAAOqW,EAAA,OAAmBlW,EAAAA,GAAG;;;;WAIzBH,EAAMmG,OAAO;;GAErB;EAGUk5B,GAAYrlC,EAAAA,QAAOC,GAAmB;IAC/Cwc,IAAyD,IAAtDzW,OAAO,OAAEC,EAAM,OAAEkG,GAAQ,OAAEm5B,GAAQ7oB,EACtC,OAAOtW,EAAAA,GAAG;;iBAEGgG,EAAO,sBAAsBA,EAAO;;aAExCA,EAAO;;uBAEGA,EAAO;;UAET,aAAXm5B,EACEr/B,EAAO,yBACPA,EAAO;oBACY,aAAXq/B,EACVr/B,EAAO,iCACPA,EAAO;KACZ;EAIQs/B,GAAavlC,EAAAA,QAAOyd,CAAiB;IAC9Cf,IAA6D,IAA1D1W,OAAO,OAAEC,EAAM,WAAEC,GAAY,OAAEo/B,GAAQ5oB,EAC1C,OAAOvW,EAAAA,GAAG;eACY,aAAXm/B,EACLr/B,EAAO,kBACPA,EAAO;QACTC,EAAW;;;;KAId;EAIQs/B,GAAgBxlC,EAAAA,QAAOC,GAAG;;;;ECtE1BwlC,GAAU,CACrB,CACE9wB,IAAK,YACLnJ,MAAO,aACPk6B,SAAU,YACVC,OAASC,IACPv/B,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+5B,GAAG,OAAO34B,WAAW,kBAAiBzG,SACzCm/B,EAAIlgC,aAIX,CACEiP,IAAK,UACLnJ,MAAO,UACPk6B,SAAU,eACVC,OAASC,IACPv/B,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+5B,GAAG,OAAO34B,WAAW,mBAAkBzG,SAC1Cm/B,EAAIE,WAIX,CACEnxB,IAAK,SACLnJ,MAAO,SACPm6B,OAAQA,KACNj/B,EAAAA,EAAAA,MAAC2+B,GAAS,CAACC,OAAO,WAAU7+B,SAAA,EAC1BJ,EAAAA,EAAAA,KAACwmB,EAAAA,gBAAe,CAACC,OAAO,cACxBzmB,EAAAA,EAAAA,KAACk/B,GAAU,CAACD,OAAO,WAAU7+B,SAAC,eAIpC,CACEkO,IAAK,YACLnJ,MAAO,YACPk6B,SAAU,YACVC,OAASC,IACPv/B,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+5B,GAAG,OAAO34B,WAAW,kBAAiBzG,SACzCm/B,EAAIG,aAIX,CACEpxB,IAAK,mBACLnJ,MAAO,sBACPm6B,OAASC,IACPv/B,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+5B,GAAG,OAAO34B,WAAW,kBAAiBzG,SACzCm/B,EAAII,gBAAgBC,WAAaL,EAAII,gBAAgBE,UAClD,GAAGN,EAAII,gBAAgBC,iBAAiBL,EAAII,gBAAgBE,YAC5DN,EAAII,gBAAgBC,cAOnBE,GAAkBP,GACtB,CACL,CAAEp6B,MAAO,eAAgBmI,MAAOiyB,EAAIQ,eAAeC,aACnD,CAAE76B,MAAO,MAAOmI,MAAOiyB,EAAIQ,eAAeE,KAC1C,CAAE96B,MAAO,aAAcmI,MAAOiyB,EAAIQ,eAAeG,mBACjD,CAAE/6B,MAAO,WAAYmI,MAAOiyB,EAAIQ,eAAeI,iBAC/C,CAAEh7B,MAAO,aAAcmI,MAAOiyB,EAAIQ,eAAeK,WACjD,CAAEj7B,MAAO,eAAgBmI,MAAOiyB,EAAIQ,eAAeM,cACnDntB,QAAQT,GAAwB,OAAfA,EAAKnF,YAAiCrI,IAAfwN,EAAKnF,OAAsC,KAAfmF,EAAKnF,QAGhEgzB,GAAc,CACzB,CACEn7B,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAACugC,EAAAA,kBAAiB,IACxB94B,QAASA,QAEX,CACEtC,MAAO,iBACPf,MAAMpE,EAAAA,EAAAA,KAACwgC,EAAAA,gBAAe,IACtB/4B,QAASA,SAIAg5B,GAAmB,CAC9B,CACEC,UAAW,UACXv7B,MAAO,UACP+a,OAAQ,CAAC,WACTE,QAAS,CACP,CAAEjb,MAAO,MAAOmI,MAAO,OACvB,CAAEnI,MAAO,OAAQmI,MAAO,QACxB,CAAEnI,MAAO,2BAA4BmI,MAAO,4BAC5C,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,OAAQmI,MAAO,UAG5B,CACEozB,UAAW,YACXv7B,MAAO,YACP+a,OAAQ,CAAC,aACTE,QAAS,CACP,CAAEjb,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,SAAUmI,MAAO,YAI9B,CACEozB,UAAW,mBACXv7B,MAAO,oBACP+a,OAAQ,CAAC,4BAA6B,6BACtCE,QAAS,CACP,CAAEjb,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,eAAgBmI,MAAO,gBAChC,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,QAASmI,MAAO,SACzB,CAAEnI,MAAO,gBAAiBmI,MAAO,iBACjC,CAAEnI,MAAO,iBAAkBmI,MAAO,kBAClC,CAAEnI,MAAO,cAAemI,MAAO,eAC/B,CAAEnI,MAAO,QAASmI,MAAO,SACzB,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,OAAQmI,MAAO,QACxB,CAAEnI,MAAO,aAAcmI,MAAO,cAC9B,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,cAAemI,MAAO,eAC/B,CAAEnI,MAAO,QAASmI,MAAO,SACzB,CAAEnI,MAAO,UAAWmI,MAAO,WAC3B,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,eAAgBmI,MAAO,gBAChC,CAAEnI,MAAO,cAAemI,MAAO,eAC/B,CAAEnI,MAAO,QAASmI,MAAO,SACzB,CAAEnI,MAAO,YAAamI,MAAO,aAC7B,CAAEnI,MAAO,WAAYmI,MAAO,YAC5B,CAAEnI,MAAO,OAAQmI,MAAO,QACxB,CAAEnI,MAAO,SAAUmI,MAAO,UAC1B,CAAEnI,MAAO,uBAAwBmI,MAAO,wBACxC,CAAEnI,MAAO,iBAAkBmI,MAAO,kBAClC,CAAEnI,MAAO,SAAUmI,MAAO,aC3InBqzB,GAAmBjhC,IAKW,IALV,KAC/BlG,EAAI,QACJuY,EAAO,aACPC,EAAY,QACZC,GACsBvS,EACtB,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACX,qBAAER,GAAyBE,KAC1ByD,EAAkB40B,GAAuB/Y,IAAAA,cAC9C5iB,IAGKuM,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAC1C6C,GAAWC,EAAAA,EAAAA,MAEXhQ,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,GA8CJwH,EAAAA,EAAAA,YAAU,KACR,MAAMs6B,EAAgBrnC,GAAQA,EAAKmS,OAAS,EAAInS,EAAO6O,EACnDw4B,GAAiBA,EAAcl1B,OAAS,GAC1ChB,aAAaW,QAAQ,2BAA4BuB,KAAKC,UAAU+zB,GAClE,GACC,CAACrnC,EAAM6O,KAEV9B,EAAAA,EAAAA,YAAU,KACR,MAAMu6B,EAAan2B,aAAa7L,QAAQ,4BACpCgiC,GACFF,EAAoB/zB,KAAKqD,MAAM4wB,GACjC,GACC,IAWH,MAKM3yB,EAAOF,EALA,CACXkF,OAAQ7U,yDACR21B,MAAO31B,kEAG4B,WAE/ByY,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU,WACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,WACdvV,MAAO,aACP2zB,UAAU,EACVp1B,cAAe,QAEfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAIfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OACE1R,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,CAC1C+N,EAAKgF,QAAWhF,EAAK8lB,OAGrBj0B,EAAAA,EAAAA,KAACwC,EAAgB,CAAApC,UACfC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,8BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAIoD,IAJnD,MACA5G,EAAK,eACLoQ,GAEgCxJ,EAChC,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,gCAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMTnP,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBC,EAAAA,EAAAA,MAAC0+B,GAAc,CAAA3+B,SAAA,EACbC,EAAAA,EAAAA,MAACy+B,GAAc,CAAA1+B,SAAA,EACbC,EAAAA,EAAAA,MAACw+B,GAAgB,CAAAz+B,SAAA,EACfJ,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+qB,QAAQ,OAAO3pB,WAAW,mBAAkBzG,SAAC,qBAGnDJ,EAAAA,EAAAA,KAACyF,EAAAA,KAAI,CAAC+qB,QAAQ,SAAS3pB,WAAW,qBAAoBzG,SAAC,wDAIzDJ,EAAAA,EAAAA,KAACuH,EAAAA,eAAc,CACbnD,MAAMpE,EAAAA,EAAAA,KAAC0zB,EAAAA,eAAc,IACrBvuB,MAAM,sBACNsC,QAASA,IAAMwB,EAAS,gDAG5BjJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,gCACbC,IAAKZ,EAAK8lB,MACVjlB,WAAW,GACXrQ,OAAQ,CACNygC,QAASA,GACT5lC,KACEA,GAAQA,EAAKmS,OAAS,EAClBnS,EACA6O,GAAwBA,EAAqBsD,OAAS,EACpDtD,EACA2D,EACR+0B,YAAY,EACZT,YAAaA,GACbU,cAAc,EACdlB,eAAgBA,GAChBW,iBAAkBA,IAGpBvxB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,+BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,eAnHbnP,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA2HtB5F,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,MACC,EC3WP4hB,GAAyB,CACpCx2B,MAAO,aAEPue,aAAc,CACZ,CACEve,MAAO,8BACPwe,OAAQ,CACN,CACE/a,MAAO,iBACPlE,KAAM,UACN6T,KAAM,WACNsL,QAAS,CACP,CAAEjb,MAAO,qCACT,CAAEA,MAAO,gDACT,CAAEA,MAAO,qDACT,CAAEA,MAAO,+CACT,CAAEA,MAAO,gDACT,CAAEA,MAAO,4CACT,CAAEA,MAAO,6CACT,CAAEA,MAAO,WAEXgb,YAAY,KAIlB,CACEze,MAAO,oBACPwe,OAAQ,CACN,CACE/a,MAAO,gCACPlE,KAAM,kBACN6T,KAAM,WACNqL,YAAY,MAKpBI,YAAa,iBACbgP,cAAc,EACd7O,aAAcA,QCvCH7mB,GAAgBF,EAAAA,QAAOC,GAAG;;;;;EC4B1BqnC,GAAoBvhC,IAIK,IAJJ,QAChCqS,EAAO,aACPC,EAAY,QACZC,GACiBvS,EACjB,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAYE0yB,EAAW,CACfxwB,KAAM8Q,GAAS2B,UAAY,GAC3B0c,YAAare,GAASsf,eAAiB,GACvC1pB,aAAcoK,GAASpK,cAAgB,GACvC+M,QAAS3C,GAAS6B,gBAAgB3S,MAAQ,GAC1CmyB,QAASrhB,GAAS6B,gBAAgBsf,SAASE,SAAW,IAGlDrc,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAU/K,GAAMzH,KAChByS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,gBACdvV,MAAO,aACPzB,cAAe,QACfo1B,UAAU,EACV/gB,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IASN5D,EAAOF,EANA,CACXkF,OAAQ7U,yDACRsyB,YAAatyB,+DACbo4B,aAAcp4B,gEAGqB,WAErC,OAAK6P,EAAKgF,QAAWhF,EAAKyiB,aAAgBziB,EAAKuoB,cAK7Cr2B,EAAAA,EAAAA,MAACJ,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAAA,EAC5CJ,EAAAA,EAAAA,KAACwC,EAAgB,CAAC,cAAY,0BAAyBpC,UACrDJ,EAAAA,EAAAA,KAAA,OAAK,cAAY,4BAA4BkD,MAAO,CAAEyzB,IAAK,UAAWv2B,UACpEC,EAAAA,EAAAA,MAAA,OAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,0BACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,4BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAMT9O,EAAAA,EAAAA,MAAC80B,GAAgB,CAAA/0B,SAAA,EACfJ,EAAAA,EAAAA,KAACnG,GAAa,CAAAuG,UACZJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,gBACbC,IAAKZ,EAAKyiB,YACV5hB,WAAW,GACXrQ,OAAQ,CACNnF,KAAM0+B,GACN/sB,WAAY,0BACZsmB,SAAU,CAAEA,aAEdviB,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAA8E,IAA7E,MAAEjX,EAAK,eAAEoQ,GAAiD6G,EAC1D,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,kBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKPnP,EAAAA,EAAAA,KAAC0C,EAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,wBACbC,IAAKZ,EAAKuoB,aACV1nB,WAAW,GACXrQ,OAAQ,CACNuD,MAAO,GACPqzB,kBAAkB,EAClBC,SAAU,GACVC,aAAa,EACbtqB,WAAY,SACZ1M,SAAS,GAEXyQ,QAAUnQ,GAA4BA,EAAMqB,SAE3CgW,IAA8E,IAA7E,MAAErX,EAAK,eAAEoQ,GAAiDiH,EAC1D,OAAOrX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,aAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,iBAQfnP,EAAAA,EAAAA,KAACsW,EAAAA,EAAY,QA3IRtW,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA4IX,ECjTPlD,IAbqB/I,EAAAA,QAAOC,GAAG;IACxC8F,IAAA,IAAC,MAAEC,GAAOD,EAAA,OAAmBI,EAAAA,GAAG;;;kBAGlBH,EAAMmG,OAAO,qBAAqBnG,EAAMmG,OAAO;WACtDnG,EAAMmG,OAAO;;;qBAGHnG,EAAMC,OAAO;;GAE/B;EAGgCjG,EAAAA,QAAOC,GAAG;;GAGhC06B,GAAyB36B,EAAAA,QAAOC,GAAG;;EAInCid,GAAUld,EAAAA,QAAOC,GAAG;;;;;;;;;;;;;;ECtBpB46B,GAAsB,CACjC,CACE9yB,MAAO,oBACPiN,QACE,4QAEJ,CACEjN,MAAO,2BACPiN,QACE,mQAEJ,CACEjN,MAAO,oCACPiN,QACE,gMAEJ,CACEjN,MAAO,wCACPiN,QACE,gSAEJ,CACEjN,MAAO,yBACPiN,QACE,mWAEJ,CACEjN,MAAO,mCACPiN,QACE,qKAEJ,CACEjN,MAAO,gDACPiN,QACE,qQAEJ,CACEjN,MAAO,iDACPiN,QACE,uIAEJ,CACEjN,MAAO,mDACPiN,QACE,mNAEJ,CACEjN,MAAO,wCACPiN,QACE,sNAEJ,CACEjN,MAAO,kFACPiN,QACE,8KAEJ,CACEjN,MAAO,iDACPiN,QACE,yNAEJ,CACEjN,MAAO,wCACPiN,QACE,gHAEJ,CACEjN,MAAO,4BACPiN,QACE,uGAEJ,CACEjN,MAAO,wCACPiN,QACE,iJCxEO8lB,GAAY96B,EAAAA,OAAOC,GAAG;IAC/B8F,IAAA,IAAC,MAAEC,GAAOD,EAAA,OAAmBI,EAAAA,GAAG;;eAErBH,EAAMmG,OAAO;;;;;;;;2BAQDnG,EAAMC,OAAO;GACrC;EAGUwB,GAAUzH,EAAAA,OAAOC,GAAG;IAC7B+L,IAAA,IAAC,MAAEhG,GAAOgG,EAAA,OAAmB7F,EAAAA,GAAG;;;;WAIzBH,EAAMmG,OAAO;;GAErB;EAGUgS,GAAQne,EAAAA,OAAOC,GAAG;IAC3Boc,IAAA,IAAC,MAAErW,GAAOqW,EAAA,OAAmBlW,EAAAA,GAAG;;aAEvBH,EAAMC,OAAO;MACpBD,EAAME,WAAW;GACpB;ECJH,GAtBsB60B,KAMlB10B,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACE,SAAS,UAAUD,KAAK,QAAOE,UAC5CJ,EAAAA,EAAAA,KAACy0B,GAAS,CAAAr0B,UACRC,EAAAA,EAAAA,MAACe,GAAO,CAAAhB,SAAA,EACNJ,EAAAA,EAAAA,KAAC8X,GAAK,CAAA1X,SAAC,2BACPJ,EAAAA,EAAAA,KAAC20B,EAAAA,SAAQ,CACPC,MAAM,QACNzvB,MAAM,iCACNsC,QAZW4N,KACnBgR,IAAmBrlB,WAAW,iCAAiC,EAYvDzB,KAAM,8BCiQlB,GAzPsBG,IAA4E,IAA3E,KAAEuB,EAAI,QAAE8Q,EAAO,aAAEC,EAAY,QAAEC,GAAyBvS,EAC7E,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACV2I,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAkBEoP,EAAOF,EANA,CACXkF,OAAQ7U,yDACR2pB,SAAU3pB,4DACVwY,cAAexY,8DAGoB,WAE/ByY,GAAavD,EAAAA,EAAAA,UACjB,KAAM,CACJC,SAAUxS,EACVyS,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,WACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd4C,aAAc,iBACdvV,MAAO,aACPzB,cAAe,QAEfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAEZ,OACE/R,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,SAC1C+N,EAAKgF,QAAWhF,EAAK2I,eAGrB9W,EAAAA,EAAAA,KAAC6W,GAAO,CAAC,cAAY,2CAA0CzW,UAC7DC,EAAAA,EAAAA,MAAA,OAAAD,SAAA,EACEJ,EAAAA,EAAAA,KAAC2C,EAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,yBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQoY,EACR7H,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAIoD,IAJnD,MACA5G,EAAK,eACLoQ,GAEgCxJ,EAChC,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,6BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,6BACbC,IAAKZ,EAAK2I,cACV9H,WAAW,GACXE,QAAUnQ,GAA4BA,EAAMqB,SAE3C4V,IAIoD,IAJnD,MACAjX,EAAK,eACLoQ,GAEgC6G,EAChC,OAAOjX,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,8BAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CAELmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAIPnP,EAAAA,EAAAA,KAACs0B,GAAsB,CAAAl0B,UACrBC,EAAAA,EAAAA,MAACqqB,GAAa,CAAAtqB,SAAA,EACZJ,EAAAA,EAAAA,KAACu0B,GAAS,CAAAn0B,SAAC,+BACVo0B,GAAoB9jB,KAAI,CAAC+B,EAAMC,KAC9B1S,EAAAA,EAAAA,KAAC8jB,EAAAA,UAAS,CAAA1jB,UACRJ,EAAAA,EAAAA,KAAC+jB,EAAAA,cAAa,CAACriB,MAAO+Q,EAAK/Q,MAAO4L,MAAO,QAAQoF,IAAQtS,SACtDqS,EAAK9D,WAFM+D,WAStB1S,EAAAA,EAAAA,KAAC0C,GAAmB,CAAAtC,UAClBJ,EAAAA,EAAAA,KAAC00B,GAAa,YArGpB10B,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,KA0GR,EC1PPs7B,GAAoBxhC,IAIG,IAJF,QAChCqS,EAAO,aACPC,EAAY,QACZC,GACevS,EACf,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACX,mBAAEpE,GAAuB8D,KAC/BhC,EAAAA,EAAAA,YAAU,QAAU,CAAC9B,IACrB,MAAO+M,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAOEoP,EAAOF,EAJA,CACXkF,OAAQ7U,0DAG2B,WAS/BiV,GAAgBC,EAAAA,EAAAA,UACpB,KAAM,CACJC,SAAU,OACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,eACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd3S,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAEjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OAAK5D,EAAKgF,QAIRnT,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CJ,EAAAA,EAAAA,KAACi+B,GAAmB,CAAC,cAAY,0BAAyB79B,UACxDC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQ4U,EACRrE,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAAC27B,GAAW,YA3CX37B,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA+CX,ECtLPu7B,GAAsBzhC,IAIC,IAJA,QAClCqS,EAAO,aACPC,EAAY,QACZC,GACevS,EACf,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACX,mBAAEpE,GAAuB8D,KAC/BhC,EAAAA,EAAAA,YAAU,QAAU,CAAC9B,IACrB,MAAO+M,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAOEoP,EAAOF,EAJA,CACXkF,OAAQ7U,0DAG2B,WAS/BiV,GAAgBC,EAAAA,EAAAA,UACpB,KAAM,CACJC,SAAU,OACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,eACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd3S,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OAAK5D,EAAKgF,QAIRnT,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CJ,EAAAA,EAAAA,KAACi+B,GAAmB,CAAC,cAAY,0BAAyB79B,UACxDC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQ4U,EACRrE,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAACkkB,GAAa,YA3CblkB,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA+CX,ECzLPw7B,GAAuB1hC,IAIA,IAJC,QACnCqS,EAAO,aACPC,EAAY,QACZC,GACevS,EACf,MAAM,KAAEgJ,IAASG,EAAAA,EAAAA,OACX,mBAAEpE,GAAuB8D,KAC/BhC,EAAAA,EAAAA,YAAU,QAAU,CAAC9B,IACrB,MAAO+M,EAAea,IAAoBjM,EAAAA,EAAAA,UAA+B,KAClEkM,EAASC,IAAcnM,EAAAA,EAAAA,WAAkB,GAE1ClN,EAAgBe,EAAAA,IAEtBsM,EAAAA,EAAAA,YAAU,KACRgM,GAAW,GAGTvC,GAAgB9W,GACbmS,MAAMnM,IACLmT,EACEnT,EAAS1F,KAAKkX,KAAI,CAAC+B,EAAMC,KAAU,CACjCjS,GAAIiS,EAAQ,EACZlR,SAAUiR,GAAME,YAChBf,UAAWa,GAAMb,UACjBlQ,MAAO+Q,GAAM/Q,MACbkR,KAAMH,GAAMjH,QACZ4E,UAAWD,GAAgBsC,GAAMI,gBAAgBzC,WACjDjR,OAAQsT,EAAKtT,OAASsT,EAAKtT,OAASsT,GAAMI,gBAAgB1T,YAI9DoT,GAAW,EAAM,IAElBhH,OAAOxM,IACNmN,QAAQnN,MAAM,gCAAiCA,GAC/CwT,GAAW,EAAM,GAIH,GACnB,IAEH,MAAMQ,EAAkBA,KACtB,IAAKC,MAAMC,QAAQzB,IAA2C,IAAzBA,EAAc7F,OACjD,OAGiB6F,EAAcd,KAAK+B,GAASA,EAAKb,YAAWsB,QAAQzS,GAAOA,IAEnEqK,SAAS8G,IAClBD,GAAiBzY,EAAe0Y,EAAW,QACxCvG,MAAK,SACLE,OAAOxM,IACNmN,QAAQnN,MAAM,+BAA+B6S,KAAc7S,EAAM,GACjE,GACJ,EAOEoP,EAAOF,EAJA,CACXkF,OAAQ7U,0DAG2B,WAS/BiV,GAAgBC,EAAAA,EAAAA,UACpB,KAAM,CACJC,SAAU,OACVC,SAAU3B,GAAS2B,SACnB/L,aAAcoK,GAASpK,aACvBiM,eAAgB7B,GAAS6B,gBAAgB3S,KACzC+Q,aAAcA,EACd6B,IAAKnL,GAAMoL,QACXC,UAAW,QACXC,cAAe,aACfC,WAAY,SACZC,SAAU,eACVC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAc,GACd3S,MAAO,aACPzB,cAAe,QACfqU,wBAAyB,CACvB,CACE7T,GAAI,IACJ0E,MAAO,eACPf,MAAMpE,EAAAA,EAAAA,KAACuU,EAAAA,WAAU,IACjBC,YAAa,WACbC,UAAW,KAUfC,QAAS,CACP,CACEjU,GAAI,IACJ0E,MAAO,kBACPf,MAAMpE,EAAAA,EAAAA,KAAC2U,EAAAA,UAAS,IAChBH,YAAa,mBACbC,UAAW,KAGfG,YAAa,CACX,CACEnU,GAAI,IACJ0E,MAAO,SACPf,MAAMpE,EAAAA,EAAAA,KAAC6U,EAAAA,OAAM,IACbL,YAAa,IACbC,UAAW,KAGfd,YAAapC,GAAyBC,GAEtCA,cAAe,CACbsD,KAAM,uBACNC,aAAcA,OACdC,aAAcA,OACdC,YAAalC,EACbvB,cAAeA,GAGjB0D,MAAOjD,KAET,CAACK,EAASP,IAGZ,OAAK5D,EAAKgF,QAIRnT,EAAAA,EAAAA,KAACC,EAAAA,cAAa,CAACC,KAAK,QAAQC,SAAS,UAASC,UAC5CJ,EAAAA,EAAAA,KAACi+B,GAAmB,CAAC,cAAY,0BAAyB79B,UACxDC,EAAAA,EAAAA,MAAA,OAAK,cAAY,4BAA2BD,SAAA,EAC1CJ,EAAAA,EAAAA,KAAC2C,GAAa,CAAAvC,UACVkS,IACAtS,EAAAA,EAAAA,KAAC6O,EAAAA,EAAgB,CACfC,aAAa,sBACbC,IAAKZ,EAAKgF,OACVnE,WAAW,GACXrQ,OAAQ4U,EACRrE,QAAUnQ,GAA4BA,EAAMqB,SAE3CuF,IAA8E,IAA7E,MAAE5G,EAAK,eAAEoQ,GAAiDxJ,EAC1D,OAAO5G,GACLiB,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,UAEPJ,EAAAA,EAAAA,KAACwP,EAAAA,EAAO,CAACC,YAAa,wBAGxBzP,EAAAA,EAAAA,KAACoP,EAAAA,IAAG,CACFlM,MAAO,CACLmM,KAAM,IACNxM,MAAO,OACPyM,QAAS,OAEXC,IAAK,EAAEnP,SAEN+O,GAEJ,OAKTnP,EAAAA,EAAAA,KAAC47B,GAAc,YA3Cd57B,EAAAA,EAAAA,KAACoN,EAAO,CAACxH,WAAW,GA+CX,ECzKPy7B,GAAYr0B,IACvB,OAAQA,GACN,KAAKnS,EAAAA,GACH,MAAO,kCACT,KAAKC,EAAAA,GACH,MAAO,iCACT,KAAKC,EAAAA,GACH,MAAO,kCACT,KAAKC,EAAAA,GACH,MAAO,mCACT,KAAKC,EAAAA,GACH,MAAO,mCACT,KAAKC,EAAAA,GACH,MAAO,iCACT,KAAKC,EAAAA,GACH,MAAO,oCACT,KAAKC,EAAAA,GACH,MAAO,8BACT,KAAKC,EAAAA,GACH,MAAO,4BACT,KAAKC,EAAAA,GACH,MAAO,qCACT,KAAKC,EAAAA,GACH,MAAO,sCACT,KAAKC,EAAAA,GACH,MAAO,4BACT,KAAKC,EAAAA,GACH,MAAO,+BACT,KAAKG,EAAAA,GACH,MAAO,gDACT,KAAKO,EAAAA,GACL,KAAKF,EAAAA,GACH,MAAO,iCACT,KAAKJ,EAAAA,GACH,MAAO,sCACT,KAAKC,EAAAA,GACH,MAAO,8BACT,KAAKC,EAAAA,GACH,MAAO,mCACT,KAAKC,EAAAA,GACH,MAAO,uCACT,KAAKE,EAAAA,GACH,MAAO,mCACT,KAAKE,EAAAA,GACH,MAAO,iCACT,KAAKC,EAAAA,GACH,MAAO,4BACT,KAAKC,EAAAA,GACH,MAAO,yCACT,KAAKC,EAAAA,GACH,MAAO,gCACT,KAAKC,EAAAA,GACH,MAAO,sCACT,KAAKC,EAAAA,GACH,MAAO,0BACT,KAAKC,EAAAA,GACH,MAAO,wBACT,KAAKC,EAAAA,GACH,MAAO,kCACT,KAAKC,EAAAA,GACH,MAAO,wBACT,KAAKC,EAAAA,GACH,MAAO,0BACT,KAAKC,EAAAA,GACH,MAAO,yBACT,KAAKC,EAAAA,EACH,MAAO,+BACT,KAAKC,EAAAA,GACH,MAAO,yBACT,KAAKC,EAAAA,GACH,MAAO,wCACT,KAAKC,EAAAA,GACH,MAAO,6BACT,KAAKC,EAAAA,GACH,MAAO,6BACT,KAAKC,EAAAA,GACH,MAAO,mCACT,QACE,MAAO,4BACX,ECtHWkkC,GAAkBt0B,IAC7B,OAAQA,GACN,KAAKnS,EAAAA,GACH,MAAO,0FACT,KAAKI,EAAAA,GACH,MAAO,iEACT,QACE,MAAO,2IACX,EC+CWsmC,GAAmB,CAC9B,mBACA,8BACA,0BACA,SACA,qBAyBWC,GAAsB,CACjC,MACA,OACA,QACA,SACA,aACA,MACA,MACA,aACA,OACA,OACA,UACA,OACA,YACA,OACA,QACA,UACA,OACA,OACA,UACA,QACA,QACA,WACA,YACA,eACA,eACA,mBACA,aACA,cACA,gBAiBWC,GAA4B,CACvC,2BACA,sCACA,yFAGWC,GAAe,CAC1B,eACA,cACA,UACA,UACA,UACA,SACA,sBACA,YACA,UACA,YACA,UACA,aACA,UACA,UACA,aACA,WACA,UACA,UACA,SACA,QACA,SACA,UACA,yBACA,WACA,SACA,SACA,WACA,eACA,UACA,aACA,WACA,WACA,SACA,2BACA,OACA,QACA,QACA,WACA,UACA,aACA,gBACA,UACA,OACA,SACA,iBACA,mCACA,UACA,WACA,WACA,qBACA,UACA,QACA,cACA,oBACA,UACA,UACA,WACA,WACA,OACA,UACA,SACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,YACA,SACA,gBACA,SACA,QACA,WACA,WACA,UACA,UACA,QACA,YACA,OACA,OACA,UACA,SACA,QACA,UACA,QACA,SACA,aACA,QACA,WACA,SACA,SACA,aACA,OACA,SACA,UACA,UACA,UACA,QACA,gBACA,YACA,aACA,aACA,SACA,WACA,WACA,OACA,QACA,mBACA,aACA,YACA,SACA,aACA,UACA,SACA,WACA,aACA,UACA,aACA,UACA,UACA,QACA,QACA,cACA,cACA,YACA,QACA,UACA,cACA,kBACA,SACA,OACA,WACA,QACA,SACA,mBACA,WACA,OACA,cACA,SACA,WACA,QACA,wBACA,UACA,SACA,SACA,wBACA,cACA,mCACA,QACA,aACA,wBACA,eACA,UACA,SACA,aACA,eACA,YACA,WACA,WACA,kBACA,UAEA,cACA,cACA,QACA,YACA,QACA,WACA,SACA,cACA,QACA,aACA,WACA,WACA,cACA,OACA,QACA,sBACA,UACA,SACA,eACA,SACA,SACA,UACA,uBACA,iBACA,gBACA,UACA,aACA,UACA,eACA,YACA,UACA,QACA,SACA,YAGWC,GAAe,CAAC,WAAY,gBC5O5BC,GAAgC,CAC3C,oBACA,iBACA,iBACA,iBACA,mBCzEWxK,GAAmB,CAC9B,8CAA+C,CAC7CyK,MAAO,CAEL,CAEE9J,QAAS,aACTxX,YAAa,YACbN,aAAc,CACZ,CACEve,MAAO,6BACPogC,oBAAoB,EACpBlyB,SAAU,6BACVggB,YAAY,EACZC,kBAAkB,EAClB3P,OAAQ,CACN,CAAE/a,MAAO,WAAYlE,KAAM,oBAAqB6T,KAAM,OAAQqL,YAAY,GAC1E,CAAEhb,MAAO,YAAalE,KAAM,qBAAsB6T,KAAM,OAAQqL,YAAY,KAGhF,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,WACPlE,KAAM,oBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASmhB,GAAiB7wB,KAAKlP,IAAQ,CACrC2D,MAAO3D,OAGX,CACE2D,MAAO,gBACPlE,KAAM,wBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASuhB,GAAajxB,KAAKqxB,IAAM,CAC/B58B,MAAO48B,SAKf,CACEnS,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,gBACPlE,KAAM,wBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,iBACPlE,KAAM,yBACN6T,KAAM,OACNqL,YAAY,KAIlB,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,OACPlE,KAAM,gBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,UACPlE,KAAM,mBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASshB,GAAahxB,KAAK0iB,IAAO,CAChCjuB,MAAOiuB,EACP9lB,MAAO8lB,SAMf,CACElT,OAAQ,CAAC,CAAEpL,KAAM,aAGnB,CACEpT,MAAO,kBACPkO,SACE,+HACFggB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,uBACPlE,KAAM,qBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,sBACPlE,KAAM,oBACN6T,KAAM,OACNqL,YAAY,KAIlB,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,yBACPlE,KAAM,uBACN6T,KAAM,MACNqL,YAAY,GAEd,CAAErL,KAAM,mBAMhB,CAEEijB,QAAS,aACTxX,YAAa,YACbN,aAAc,CACZ,CACEve,MAAO,6BACPogC,oBAAoB,EACpBlyB,SAAU,6BACVggB,YAAY,EACZC,kBAAkB,EAClB3P,OAAQ,CACN,CAAE/a,MAAO,WAAYlE,KAAM,oBAAqB6T,KAAM,OAAQqL,YAAY,GAC1E,CAAEhb,MAAO,YAAalE,KAAM,qBAAsB6T,KAAM,OAAQqL,YAAY,KAGhF,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,WACPlE,KAAM,oBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASmhB,GAAiB7wB,KAAKlP,IAAQ,CACrC2D,MAAO3D,OAGX,CACE2D,MAAO,gBACPlE,KAAM,wBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASuhB,GAAajxB,KAAKqxB,IAAM,CAC/B58B,MAAO48B,SAKf,CACEnS,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,gBACPlE,KAAM,wBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,iBACPlE,KAAM,yBACN6T,KAAM,OACNqL,YAAY,KAIlB,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,OACPlE,KAAM,gBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,UACPlE,KAAM,mBACN6T,KAAM,WACNqL,YAAY,EACZC,QAASshB,GAAahxB,KAAK0iB,IAAO,CAChCjuB,MAAOiuB,EACP9lB,MAAO8lB,SAMf,CACElT,OAAQ,CAAC,CAAEpL,KAAM,aAGnB,CACEpT,MAAO,kBACPkO,SACE,+HACFggB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,uBACPlE,KAAM,qBACN6T,KAAM,OACNqL,YAAY,GAEd,CACEhb,MAAO,sBACPlE,KAAM,oBACN6T,KAAM,OACNqL,YAAY,KAIlB,CACEyP,YAAY,EACZ1P,OAAQ,CACN,CAEE/a,MAAO,yBACPlE,KAAM,uBACN6T,KAAM,MACNqL,YAAY,GAEd,CAAErL,KAAM,mBAMhB,CACEijB,QAAS,yBACTxX,YAAa,YACbN,aAAc,CACZ,CACEve,MAAO,oBACPogC,oBAAoB,EACpBlyB,SAAU,8EACVggB,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,YACPlE,KAAM,YACN6T,KAAM,WACNqL,YAAY,EACZC,QFoDc,CAC5B,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UE9GsC1P,KAAKgvB,IAAS,CACpCv6B,MAAOu6B,EACPpyB,MAAOoyB,OAGX,CACEv6B,MAAO,yBACPlE,KAAM,uBACN6T,KAAM,WACNqL,YAAY,EACZC,QFuGyB,CACvC,KACA,aACA,aACA,cACA,cACA,QACA,QACA,SACA,SACA,OACA,QElHiD1P,KAAKoE,IAAI,CAC1C3P,MAAO2P,EACPxH,MAAOwH,SAKf,CACE8a,YAAY,EACZ1P,OAAQ,CACN,CACE/a,MAAO,aACPlE,KAAM,aACN6T,KAAM,WACNqL,YAAY,EACZC,QFsGqB,CACnC,cACA,qDACA,iEEzG6C1P,KAAKqxB,IAAM,CACxC58B,MAAO48B,EACPz0B,MAAOy0B,OAGX,CACE58B,MAAO,eACPlE,KAAM,cACN6T,KAAM,MACNqL,YAAY,EACZ6hB,WAAY,8BAIlB,CA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","sources":["webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/save-lead.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Modal/ModalForm.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/constants.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/generate-correlation-id.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/interceptors/auth-interceptor.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/WhatsppBSP/loader/Loader.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/WhatsppBSP/loader/Loader.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/services/NavigationService.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/Dashboard.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/PlusIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/WhatsAppBNIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/ConvergeIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/configs/ProductCardsData.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/configs/InfoCardsData.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-service-inventory.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-token.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/Loading/Loading.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/logoutModal/LogoutModal.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/logoutModal/LogoutModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-service-requests.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/ProfileProvider.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-profile.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/resolve-feature-app-url.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/hooks/use-fetch-feature-app-urls.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/enquiry-modal/EnquireModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/configs/BannerData.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-notification.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/map-notification.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/edit-notification.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/Dashboard/Dashboard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/report-web-vitals.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/LogSupportTicket/LogSupportTicket.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/LogSupportTicket/LogSupportTicket.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/ProvideFeedback/ProvideFeedback.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/ProvideFeedback/ProvideFeedback.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/UpcomingServices/UpcomingServices.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/UpcomingServices/UpcomingServices.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/App.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/types/NavSidebar.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/WelcomePage/LandingPage.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/NetworkTool/NetworkTool.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/hooks/icon-size.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/NetworkToolsIcons.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/NetworkTool/NetworkTool.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/cookie/Modal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/cookie/CookieMessage.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/authModal/AuthErrorModal.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/authModal/AuthErrorModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/WhatsppBSP/WhatsappBSP.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/WhatsppBSP/WhatsappBSP.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Footer/Footer.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Footer/Footer.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/IpxAnalytics/IpxAnalytics.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/IpxAnalyticsIcons.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Modal/ipx-form.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Modal/IpxModalForm.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/IpxAnalytics/IpxAnalytics.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/analytics.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Converge/Converge.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Converge/Converge.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/WelcomePage/LandingPage.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/NavBar/Header.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/NavBar/Header.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LookingGlass/LookingGlass.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LookingGlass/LookingGlass.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/PeeringPolicy/PeeringPolicy.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/PeeringPolicy/PeeringPolicy.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/DashboardWbsp.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/icons/FacebookIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/icons/PhoneBook.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/icons/EnterpriseManagement.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/configs/BannerData.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/OverviewCards/OverviewCards.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/OverviewCards/OverviewCards.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-overview-page-details.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Dashboard/DashboardWbsp.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-campaigns.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/MessageTemplates/MessageTemplates.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/MessageTemplates/MessageTemplateConfig.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/send-feedback.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/hooks/use-fetch-submissions.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/get-submission-period.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/feedbackModal/FeedbackModal.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/configs/feedback-modal-config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/models/feedback.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/feedbackModal/Confirmation.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/feedbackModal/FeedbackModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/MessageTemplates/MessageTemplates.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/latencyMatrix/LatencyMatrix.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/latencyMatrix/LatencyMatrix.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/globalComponents/ProfilePage/Profile.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/globalComponents/ProfilePage/Profile.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/OverviewPage/QuickQuotesDashboard.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/OverviewPage/QuickQuotesDashboard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/SavedQuotes/SavedQuotes.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/SavedQuotes/SavedQuotes.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/list-quotes.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/quickQuoteSupportTicket/QuickQuoteSupportTicket.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/SupportAndFaqs/SupportAndFaqs.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/quickQuoteSupportTicket/faq.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/quickQuoteSupportTicket/ImportantInfo.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/quickQuoteSupportTicket/ImportantInfo.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/quickQuoteSupportTicket/QuickQuoteSupportTicket.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/DetailsTable/DetailsTable.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/ProductList/ProductList.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/DetailsTable/DetailsTable.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/latencyMatrix/Disclaimer.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/L2VpnIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/IpTransitIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/DiaIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/L3VpnIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/IplcIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/DarkFibreIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/icons/NplcIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/ProductList/ProductList.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/ProductList/ProductPage.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/Error.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/DiaFormDataSets.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/L2vpnFormDataSets.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/ProductsConfigurations.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/IptFormDataSets.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/CustomiseProduct.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/TermsAndConditions/terms.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/TermsAndConditions/TermsAndConditions.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/SendAnEmail/send-email.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/SendAnEmail/SendAnEmail.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/SendAnEmail/SendAnEmail.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/FormDataSets.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/NonStandardProductConfigs.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/QuickQuotes/CustomiseProduct/RequestQuote.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Campaigns/Campaigns.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Campaigns/Campaigns.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/SupportAndFaqs/Faqs.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/SupportAndFaqs/SupportAndFaqs.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/AccountManagement.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/StatusIndicatorMessage/styles/shared-styles.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/StatusIndicatorMessage/StatusIndicator.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/AccountManagmentHeader/AccountManagementHeader.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/AccountManagementConfig.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/AccountManagmentHeader/AccountManagementHeader.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/AccountManagement/AccountManagement.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Terms/Terms.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Terms/Terms.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Privacy/Privacy.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/Privacy/Privacy.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/WhatsappDoc/ApiDocumentation.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/WhatsappDoc/ApiDocumentation.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/PeeringPolicy/PeeringList.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/PeeringPolicy/PeeringRequest.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/Dashboard/ConvergeDashboard.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/service-map.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/Dashboard/ConvergeDashboard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/get-latest-draft.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/networkTools/NetworkTools.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/networkTools/LookingGlassPortal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/CentralNotifications/CentralNotifications.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/CentralNotifications/CentralNotifications.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/delete-notification.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceInventory/ServiceInventory.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceInventory/ServiceInventory.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceInventory/ServiceInventory.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/SendAnEmail/send-email.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/SendAnEmail/SendAnEmail.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/SendAnEmail/SendAnEmail.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/convergeSupportTicket/SupportTicket.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/convergeSupportTicket/faq.config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/convergeSupportTicket/ImportantInfo.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/convergeSupportTicket/ImportantInfo.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/convergeSupportTicket/SupportTicket.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/networkTools/PeeringListPortal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/networkTools/PeeringPolicyPortal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/customerportal/networkTools/PeeringRequestPortal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/get-title.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/get-description.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/TechnicalSpecificationsFormPage/configs/non-standard-datasets.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/TechnicalSpecificationsFormPage/configs/standard-datasets.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/TechnicalSpecificationsFormPage/configs/technical-forms-configs.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/TechnicalSpecificationsFormPage/TechnicalSpecificationsForm.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/formdata.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/create-contact.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/createUser/loader/Loader.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/createUser/loader/Loader.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/update-user-access.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/createUser/CreateUser.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/get-user-id.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequest/ServiceRequest.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequest/ServiceProducts.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequest/ServiceRequest.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/UserManagement.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/FormatModifiedDate.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/UserDetails.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/PortalColumn.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/UserManagement.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/UserManagementModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/userManagementTable/UserManagement.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-list-of-contacts.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/edit-user-status.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequestTable/ServiceRequest.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ToastNotification/ToastNotification.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequestTable/ServiceRequestTable.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/ServiceRequest/ServiceRequestSelection.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/QuickQuotesBasicForm/configs/quick-quote-form.configs.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/converge/QuickQuotesBasicForm/QuickQuotesBasicForm.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/userManagement/editUserDetails/EditUserDetails.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/CustomerSupport/FaqConfig.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/CustomerSupport/SupportFormConfig.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/models/support-email.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/CustomerSupport/ConfirmationModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/CustomerSupport/CustomerSupport.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/send-support-email.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Analytics/Analytics.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/get-message-analytics.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Analytics/Analytics.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/FeedbackButton.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/provide-feedback.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/configs/feedback-form-config.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/assets/icons/SidePanelIcon.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/configs/ProductCardConfig.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/SelectCards/SelectCards.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/SelectCards/SelectCards.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/log-a-ticket/LogATicket.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/log-a-ticket/LogATicket.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/help-centre/HelpCentre.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/help-centre/HelpCentre.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/feedback/FeedbackButton.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/hooks/use-logout.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/CreateFlows/CreateFlows.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/CreateFlows/CreateFlows.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/ReportingDashboard.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/NoResults/NoResults.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/NoResults/NoResults.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/ReportCard/ReportCard.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/ReportCard/ReportCard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/Dashboard/ReportingDashboard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/ProductReport/ProductReport.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/ProductReport/ProductReport.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/ProductReport/ProductReport.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/ReportingAnalytics/ReportingAnalytics.styled.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/IPReporting/ReportingAnalytics/ReportingAnalytics.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/ApiDocumentation.styles.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/MaskedCredentials.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/format-date.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/ApiPortalTable.config.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/FAQ.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/rubyverse-portal/get-app-details.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/ApiDocumentation.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/rubyverse-portal/get-api-dev-account.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/rubyverse-portal/get-api-products.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/get-all-app-data.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/rubyverse-portal/create-api-dev-account.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/apis/rubyverse-portal/create-app.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/CampaignsTable/CampaignsTable.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/CampaignsTable/SendReportModal/SendReportModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/CampaignsTable/CampaignsTable.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Catalogues/Catalogues.style.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappBsp/Catalogues/Catalogues.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/InfoCard.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/authorization/whatsappAPI/ApisView.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/App.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/externals/ExternalLibs.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/services/ApiClient.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/index.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/services/SharedDataService.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/services/LocalDataService.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/services/DynamicDataService.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/components/unauthorization/IpPortal/LandingPageCards/Modal/ConfirmModal.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/ErrorUI/ErrorUI.tsx","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/capitalise-text.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/models/lead.ts","webpack://@mtnkente/ac-central-customer-communication-portal/./src/app/utils/countries.ts"],"sourcesContent":["import { Lead, LeadResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport async function saveLead(\n  correlationId: string,\n  lead: Lead,\n  token?: string\n): Promise<LeadResponse> {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v2/sm-central-lead`;\n\n  const response = await apiClient.post(url, lead, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      token,\n    },\n  });\n\n  return response.data;\n}\n","import styled from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  desktop: '992px',\n  iPadPro: '1024px',\n  iPadAir: '820px',\n  mobile2: '375px',\n};\n\nexport const ModalOverlay = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: var(--colour-opacity-highest-inverse, rgba(34, 45, 60, 0.8));\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 10;\n\n  @media (max-width: ${breakpoints.tablet}) {\n    align-items: flex-start;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    align-items: stretch;\n    background-color: white;\n  }\n`;\n\nexport const FormContainer = styled.div`\n  width: 65vw;\n\n  @media (min-width: 1440px) {\n    width: 950px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    width: 75vw;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    padding-left: 25px;\n    width: 100%;\n  }\n`;\n\nexport const BspForm = styled.div`\n  background-color: white;\n  padding: 80px;\n  border-radius: 24px;\n  max-height: 807px;\n  width: 80%;\n  max-width: 1040px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n\n  @media (max-width: ${breakpoints.iPadPro}) {\n    max-width: none;\n    max-height: none;\n    margin: 0;\n    padding: 0px;\n    position: fixed;\n    justify-content: flex-start;\n    overflow-y: auto;\n    padding-bottom: 30px;\n  }\n\n  @media (max-width: ${breakpoints.iPadAir}) {\n    padding: 0px;\n    justify-content: flex-start;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    height: 100vh;\n    width: 100vw;\n    max-width: none;\n    max-height: none;\n    border-radius: 0;\n    margin: 0;\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    height: 100%;\n    width: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    margin: 0;\n    border-radius: 0;\n    max-height: none;\n    max-width: none;\n    justify-content: flex-start;\n    overflow-y: auto;\n    box-sizing: border-box;\n  }\n\n  @media (max-width: ${breakpoints.mobile2}) {\n    height: 100%;\n    width: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    padding: 20px 15px 0px;\n    margin: 0;\n    border-radius: 0;\n    max-height: none;\n    max-width: none;\n    justify-content: flex-start;\n    overflow-y: auto;\n    box-sizing: border-box;\n  }\n`;\n\nexport const CloseButton = styled.div`\n  position: absolute;\n  top: 10px;\n  right: 20px;\n  background: none;\n  border: none;\n  font-size: 1.5rem;\n  cursor: pointer;\n  z-index: 10;\n\n  @media (max-width: ${breakpoints.tablet}) {\n    z-index: 15;\n    top: 0px;\n    right: 10px;\n  }\n`;\n\nexport const Card = styled.div`\n  background-color: white;\n  width: 100%;\n  position: relative;\n  max-height: 584px;\n  padding: 50px;\n  /* padding: 50px 10px 10px 10px; */\n\n  @media (max-width: ${breakpoints.tablet}) {\n    width: 100%;\n    max-width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 20px;\n    max-height: none;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    padding: 15px;\n    height: 100%;\n  }\n\n  @media (max-width: ${breakpoints.iPadPro}) {\n    flex: 1;\n    height: 100%;\n  }\n`;\n","import { generateCorrelationId } from './generate-correlation-id';\n\nexport const CORRELATION_ID = generateCorrelationId();\n\n//Names of services\nexport const WHATSAPP_BM_SERVICE = 'WhatsApp Business Messaging';\nexport const IPX_ADVANCED_ANALYTICS_SERVICE = 'IPX Analytics';\nexport const SMS_HUB_SERVICES = ['A2P', 'P2P', 'P2A'];\nexport const CONVERGE_SERVICES = [\n  'International Private Leased Circuit',\n  'International IP Transit',\n  'L2 VPN',\n  'L3 VPN',\n  'Dedicated Internet Access',\n  'Dark Fibre',\n  'National Private Leased Circuit',\n  'Public Cloud Access',\n  'Miscellaneous',\n  'Satellite',\n  'VPN Site',\n  'Broadband Internet Access',\n  'CPE',\n  'Data Centre',\n  'DDoS Protection',\n  'National Private Leased Circuit Kenya',\n];\n\n// Landing page Paths\nexport const LOOKING_GLASS = '/looking-glass';\nexport const TERMS_OF_USE = '/terms-of-use';\nexport const FREQUENTLY_ASKED_QUESTIONS = '/frequently-asked-questions';\nexport const WABSP_API_DOC = '/wabsp-api-doc';\nexport const Privacy_Notice = '/privacy-notice';\nexport const PEERING_POLICY = '/peering-information/policy';\nexport const PEERING_LIST = '/peering-information/list';\nexport const PEERING_REQUEST = '/peering-information/request';\nexport const ERROR_PAGE = '*';\n\n// Customer Portal Paths\nexport const DASHBOARD = '/dashboard';\nexport const PROFILE = '/profile';\nexport const FEEDBACK_PAGE = '/feedback';\nexport const UPCOMING_SERVICES_PAGE = '/upcoming-services';\nexport const LOG_SUPPORT_TICKET_PAGE = '/log-support-ticket';\nexport const DISCLAIMER_PAGE = '/disclaimer';\nexport const IPX_ANALYTICS_PAGE = '/ipx-analytics';\nexport const LATENCY_MATRIX_PAGE = '/network-tools/latency-matrix';\n\n//Whatsapp Paths\nexport const WHATSAPP_OVERVIEW_PAGE = '/whatsapp-business-messaging';\n\nexport const WHATSAPP_MESSAGE_TEMPLATES_PAGE = '/whatsapp-business-messaging/message-templates';\nexport const WHATSAPP_CAMPAIGNS_PAGE =\n  '/whatsapp-business-messaging/campaign-management/create-new-campaign';\nexport const WHATSAPP_SUPPORT_PAGE = '/whatsapp-business-messaging/support-&-faqs';\nexport const WHATSAPP_ACCOUNT_MANAGEMENT_PAGE = '/whatsapp-business-messaging/account-management';\nexport const WHATSAPP_CREATE_TEMPLATE_PAGE =\n  '/whatsapp-business-messaging/message-templates/create-template';\n//Quick Quotes Paths\nexport const QUICK_QUOTES_PAGE = '/quick-quotes';\nexport const QUICK_QUOTES_SUPPORT_PAGE = '/quick-quotes/support-faqs';\nexport const QUICK_QUOTES_OVERVIEW_PAGE = '/quick-quotes/overview';\nexport const SAVED_QUOTES_PAGE = '/quick-quotes/saved-quotes';\nexport const QUICK_QUOTES_DETAILS_TABLE_PAGE = '/quick-quotes/saved-quotes/quote-details';\nexport const QUICK_QUOTES_TERMS_AND_CONDITIONS_PAGE = '/quick-quotes/terms-and-conditions';\nexport const QUICK_QUOTES_PRODUCT_PAGE = '/quick-quotes/create-quote/add-product';\nexport const QUICK_QOUTES_CUSTOMISE_PRODUCT_PAGE = '/quick-quotes/create-quote/customise-product';\nexport const L2VPN_PAGE = '/quick-quotes/create-quote/customise-product/l2vpn';\nexport const IPT_PAGE = '/quick-quotes/create-quote/customise-product/ipt';\nexport const EMAIL_SUPPORT_PAGE = '/quick-quotes/email-support';\nexport const DIA_PAGE = '/quick-quotes/create-quote/customise-product/dia';\nexport const L3VPN_PAGE = '/quick-quotes/create-quote/customise-product/l3vpn';\nexport const IPLC_PAGE = '/quick-quotes/create-quote/customise-product/iplc';\nexport const DARK_FIBRE_PAGE = '/quick-quotes/create-quote/customise-product/dark-fibre';\nexport const NPLC_PAGE = '/quick-quotes/create-quote/customise-product/nplc';\nexport const PUBLIC_CLOUD_ACCESS_PAGE =\n  '/quick-quotes/create-quote/customise-product/public-cloud-access';\n\n//Converge Paths\nexport const CONVERGE_PAGE = '/converge';\nexport const SERVICE_INVENTORY_PAGE = '/converge/services';\nexport const CONVERGE_SUPPORT_AND_FAQS_PAGE = '/converge/support-&-faqs';\nexport const CONVERGE_REQUEST_NEW_SERVICE_PAGE = '/converge/services/request-new-service';\nexport const REQUEST_L2VPN_SERVICE_PAGE = '/converge/services/request-new-service/l2vpn';\nexport const REQUEST_L3VPN_SERVICE_PAGE = '/converge/services/request-new-service/l3vpn';\nexport const REQUEST_DIA_SERVICE_PAGE = '/converge/services/request-new-service/dia';\nexport const REQUEST_IPLC_SERVICE_PAGE = '/converge/services/request-new-service/iplc';\nexport const REQUEST_DARK_FIBRE_SERVICE_PAGE = '/converge/services/request-new-service/dark-fibre';\nexport const REQUEST_NPLC_SERVICE_PAGE = '/converge/services/request-new-service/nplc';\nexport const SERVICE_REQUESTS_PAGE = '/converge/service-requests';\nexport const QQ_L2VPN_SERVICE_PAGE = '/converge/services/quick-quote/l2vpn';\nexport const QQ_DIA_SERVICE_PAGE = '/converge/services/quick-quote/dia';\nexport const REQUEST_LEO_SATELLITE_SERVICE_PAGE =\n  '/converge/services/request-new-service/leo-satellite';\nexport const REQUEST_PCA_SERVICE_PAGE =\n  '/converge/services/request-new-service/public-cloud-access';\nexport const REQUEST_IP_TRANSIT_PAGE = '/converge/services/request-new-service/ip-transit';\nexport const CONVERGE_REPORTS_PAGE = '/converge/reports';\n\n//User Management Paths\nexport const USER_MANAGEMENT_PAGE = '/user-management';\nexport const EDIT_USER_DETAILS_PAGE = '/user-management/edit-user';\nexport const CREATE_USER_PAGE = '/user-management/create-user';\n\n//paths to hide feedback button\nexport const FEEDBACK_BUTTON_HIDDEN_PATHS = [\n  REQUEST_DARK_FIBRE_SERVICE_PAGE,\n  REQUEST_IPLC_SERVICE_PAGE,\n  REQUEST_L2VPN_SERVICE_PAGE,\n  REQUEST_L3VPN_SERVICE_PAGE,\n  REQUEST_DIA_SERVICE_PAGE,\n  REQUEST_NPLC_SERVICE_PAGE,\n  REQUEST_LEO_SATELLITE_SERVICE_PAGE,\n  REQUEST_PCA_SERVICE_PAGE,\n  REQUEST_IP_TRANSIT_PAGE,\n  REQUEST_L2VPN_SERVICE_PAGE,\n  QQ_L2VPN_SERVICE_PAGE,\n  QQ_DIA_SERVICE_PAGE,\n  WHATSAPP_CAMPAIGNS_PAGE,\n  WHATSAPP_CREATE_TEMPLATE_PAGE,\n];\n","export function generateCorrelationId(): string {\n  const length = 50;\n  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n  const randomValues = new Uint8Array(length);\n  window.crypto.getRandomValues(randomValues);\n\n  let result = '';\n  for (let i = 0; i < length; i++) {\n    result += characters.charAt(randomValues[i] % characters.length);\n  }\n\n  return result;\n}\n","import axios, { InternalAxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';\n\nconst apiClient = axios.create({\n  baseURL: process.env.REACT_APP_API_BASE_URL,\n  timeout: 60000,\n  headers: {\n    'Content-Type': 'application/json',\n  },\n});\n\napiClient.interceptors.request.use(\n  (config: InternalAxiosRequestConfig) => {\n    const userToken = sessionStorage.getItem('accessToken');\n\n    if (userToken) {\n      config.headers = config.headers || {};\n      config.headers['Authorization'] = `Bearer ${userToken}`;\n    }\n    return config;\n  },\n  (error: AxiosError) => {\n    return Promise.reject(error);\n  }\n);\n\napiClient.interceptors.response.use(\n  (response: AxiosResponse) => {\n    return response;\n  },\n  (error: AxiosError) => {\n    if (error.response) {\n      const status = error.response.status;\n      const data = error.response?.data as { serviceId: string };\n      const service = data?.serviceId;\n      if (status === 401 && service !== 'sm-central-wbsp-upload-media-meta') {\n        window.location.href = '';\n      }\n    }\n\n    return Promise.reject(error);\n  }\n);\n\nexport default apiClient;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const LoadingWrapper = styled.div`\n  display: inline-flex;\n  padding: 10px;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  margin-top: 70px;\n  z-index: 20;\n  @media (max-width: 768px) {\n    position: relative;\n  }\n`;\n\nexport const BodyText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour-tertiary']};\n      text-align: center;\n\n      ${typography['caption-regular']}/* device-size-m-l/caption/regular */\n    `;\n  }}\n`;\n","import React from 'react';\nimport { BodyText, LoadingWrapper } from './Loader.styled';\nimport { CircularIndeterminate } from '@mtnkente/paragon-indicators';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\n\nconst LoaderApp = (): JSX.Element => {\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <LoadingWrapper data-testid='loading-wrapper'>\n        <CircularIndeterminate size='large' />\n        <BodyText>Sending email.....</BodyText>\n      </LoadingWrapper>\n    </ThemeProvider>\n  );\n};\n\nexport default LoaderApp;\n","/* eslint-disable no-console */\nimport {\n  FeatureServiceBinder,\n  FeatureServiceProviderDefinition,\n  FeatureServices,\n  SharedFeatureService,\n} from '@feature-hub/core';\nimport { HistoryServiceV3 } from '@feature-hub/history-service';\nimport { History } from 'history';\nimport { contentTracking, Content } from '@mtnkente/gtm';\n\nexport interface NavigationServiceV1 {\n  readonly history: History;\n  navigateTo(name: string, params?: Record<string, any>): string;\n  // navigateTos(name: string, params?: Record<string, any>): string;\n}\n\nexport interface SharedNavigationService extends SharedFeatureService {\n  readonly '1.0.0': FeatureServiceBinder<NavigationServiceV1>;\n}\n\nexport interface NavigationServiceDependencies extends FeatureServices {\n  readonly 's2:history': HistoryServiceV3;\n}\n\nexport function createSlug(name: string): string {\n  return name\n    .toLowerCase()\n    .replace(/\\s+/g, '-')\n    .replace(/[^a-z0-9-/]/g, '');\n}\n\nexport const navigationServiceDefinition: FeatureServiceProviderDefinition<\n  SharedNavigationService,\n  NavigationServiceDependencies\n> = {\n  id: 'shell:navigation-service',\n  dependencies: {\n    featureServices: {\n      's2:history': '^3.0.0',\n    },\n  },\n\n  create: ({ featureServices }) => {\n    const history = featureServices['s2:history'].rootHistory;\n    return {\n      '1.0.0': () => ({\n        featureService: {\n          history,\n          navigateTo(name: string, params?: Record<string, any>): string {\n            // test events\n            contentTracking(\n              new Content({\n                eventName: 'buttonClick',\n                eventDescription: 'User clicked on Create button',\n                eventTrigger: 'button_click',\n                category: 'Navigation',\n                subcategory: 'create',\n                title: 'Create Button ',\n                description: `User initiated Create ${name}`,\n              })\n            );\n\n            const queryParams = params ? `?${new URLSearchParams(params)}` : '';\n            const url = `${name}${queryParams}`;\n            history.push({ pathname: url });\n            const originalPush = history.push;\n            history.push = (HistoryUrl, state): void => {\n              originalPush(HistoryUrl, state);\n            };\n            return url;\n          },\n          navigateTos(name: string, params?: Record<string, any>): string {\n            const defaultUrl = 'peering-information';\n            const slug = createSlug(name);\n            const queryParams = params ? `?${new URLSearchParams(params)}` : '';\n            const url = `/${defaultUrl}/${slug}${queryParams}`;\n            history.push({ pathname: url });\n            return url;\n          },\n        },\n      }),\n    };\n  },\n};\n","import styled from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  desktop: '992px',\n  iPadPro: '1024px',\n};\n\nexport const DashboardWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  /* overflow-y: auto; */\n  box-sizing: border-box;\n  padding-bottom: 20px;\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 40px 30px 40px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const BannerMobileWrapper = styled.div`\n  margin-top: 2rem;\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-bottom: 0;\n  }\n`;\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React from 'react';\n\nconst PlusIcon = (): JSX.Element => (\n  <svg width='64' height='64' viewBox='0 0 64 64' fill='none' xmlns='http://www.w3.org/2000/svg'>\n    <mask\n      id='mask0_16453_3937'\n      style={{ maskType: 'alpha' }}\n      maskUnits='userSpaceOnUse'\n      x='0'\n      y='0'\n      width='64'\n      height='64'\n    >\n      <g clipPath='url(#clip0_16453_3937)'>\n        <path\n          d='M40 32H32M32 32H24M32 32V24M32 32V40'\n          stroke='#344052'\n          strokeWidth='2.46154'\n          strokeLinecap='round'\n        />\n        <path\n          d='M58.6595 32.0002C58.6595 44.5708 58.6595 50.8564 54.7542 54.7615C50.8491 58.6668 44.5635 58.6668 31.9928 58.6668C19.422 58.6668 13.1367 58.6668 9.23142 54.7615C5.32617 50.8564 5.32617 44.5708 5.32617 32.0002C5.32617 19.4294 5.32617 13.144 9.23142 9.23875C13.1367 5.3335 19.422 5.3335 31.9928 5.3335C44.5635 5.3335 50.8491 5.3335 54.7542 9.23875C57.351 11.8354 58.2211 15.4843 58.5126 21.3335'\n          stroke='#344052'\n          strokeWidth='2.46154'\n          strokeLinecap='round'\n        />\n      </g>\n    </mask>\n    <g mask='url(#mask0_16453_3937)'>\n      <rect width='64' height='64' fill='#222D3C' fillOpacity='0.72' />\n    </g>\n    <defs>\n      <clipPath id='clip0_16453_3937'>\n        <rect width='64' height='64' fill='white' />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport default PlusIcon;\n","import React from 'react';\n\nexport interface IconProps {\n  fill?: string;\n}\n\nconst WhatsAppBNIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg width='64' height='64' viewBox='0 0 64 64' fill='none' xmlns='http://www.w3.org/2000/svg'>\n    <mask\n      id='mask0_14792_5287'\n      style={{ maskType: 'alpha' }}\n      maskUnits='userSpaceOnUse'\n      x='0'\n      y='0'\n      width='64'\n      height='64'\n    >\n      <g clipPath='url(#clip0_14792_5287)'>\n        <path\n          fillRule='evenodd'\n          clipRule='evenodd'\n          d='M50.4233 13.6312C45.5357 8.71259 39.0353 6.0025 32.1092 6C17.8374 6 6.22222 17.6726 6.21726 32.0204C6.21477 36.607 7.40782 41.0839 9.6735 45.0293L6 58.5149L19.7256 54.8964C23.5071 56.9702 27.7653 58.0619 32.0981 58.0632H32.1092C46.3786 58.0632 57.9951 46.3893 58 32.0416C58.0025 25.088 55.3122 18.551 50.4233 13.6324V13.6312ZM32.1092 53.6686H32.1005C28.2395 53.6675 24.4519 52.6243 21.1472 50.6541L20.3613 50.185L12.216 52.3323L14.3898 44.3505L13.8783 43.532C11.7244 40.0883 10.586 36.1079 10.5885 32.0217C10.5934 20.097 20.247 10.3945 32.118 10.3945C37.8659 10.397 43.2688 12.6492 47.3321 16.7381C51.3954 20.8257 53.6313 26.2609 53.6288 32.0391C53.6238 43.965 43.9703 53.6675 32.1092 53.6675V53.6686ZM43.9131 37.4705C43.2662 37.1449 40.0857 35.5726 39.4922 35.3556C38.8988 35.1384 38.4681 35.03 38.0372 35.6812C37.6065 36.3326 36.3663 37.7974 35.9888 38.2304C35.6114 38.6646 35.234 38.7183 34.5871 38.3925C33.9405 38.0669 31.856 37.3806 29.3843 35.1659C27.4613 33.4415 26.1626 31.3129 25.7853 30.6615C25.4078 30.0103 25.7456 29.6584 26.0682 29.3352C26.3587 29.0433 26.7151 28.5754 27.0391 28.196C27.3632 27.8167 27.4699 27.5448 27.6859 27.1117C27.902 26.6775 27.7939 26.2983 27.6326 25.9725C27.4711 25.6469 26.1776 22.4464 25.6375 21.145C25.1123 19.8774 24.5786 20.0496 24.1825 20.0283C23.8051 20.0096 23.3744 20.0059 22.9423 20.0059C22.5103 20.0059 21.81 20.1681 21.2166 20.8194C20.6233 21.4707 18.9522 23.0441 18.9522 26.2433C18.9522 29.4425 21.2701 32.5357 21.5941 32.9699C21.9181 33.4042 26.1564 39.971 32.6455 42.7884C34.1888 43.4584 35.3942 43.8589 36.3339 44.1584C37.8834 44.6537 39.2936 44.5839 40.4084 44.4167C41.6512 44.2295 44.2359 42.8433 44.7747 41.3247C45.3134 39.8062 45.3134 38.5036 45.1521 38.2328C44.9908 37.9621 44.5587 37.7986 43.9119 37.473L43.9131 37.4705Z'\n          fill={fill}\n        />\n      </g>\n    </mask>\n    <g mask='url(#mask0_14792_5287)'>\n      <rect width='64' height='64' fill={fill} />\n    </g>\n    <defs>\n      <clipPath id='clip0_14792_5287'>\n        <rect width='64' height='64' fill={fill} />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nWhatsAppBNIcon.displayName = 'WhatsAppBNIcon';\n\nexport default WhatsAppBNIcon;\n","import React from 'react';\n\nexport interface IconProps {\n  fill?: string; // Allow the parent to pass a custom color\n}\n\nconst ConvergeIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg xmlns='http://www.w3.org/2000/svg' width='52' height='51' viewBox='0 0 52 51' fill='none'>\n    <path\n      d='M9.71387 1.10254C11.2458 2.67093 19.9509 11.8503 19.4403 26.0265C18.9905 38.6588 11.5254 46.6709 9.71387 48.5189'\n      stroke={fill}\n      strokeWidth='2'\n      strokeMiterlimit='10'\n      strokeLinecap='round'\n    />\n    <path\n      d='M40.3626 1.10254C38.4903 3.38825 31.4143 12.5554 31.852 26.0265C32.241 37.9901 38.3201 46.0387 40.3626 48.5189'\n      stroke={fill}\n      strokeWidth='2'\n      strokeMiterlimit='10'\n      strokeLinecap='round'\n    />\n    <path\n      d='M1.43262 1.68616C2.96453 3.25455 11.6697 12.4339 11.1591 26.6102C10.7092 39.2424 3.24417 47.2545 1.43262 49.1026'\n      stroke={fill}\n      strokeWidth='2'\n      strokeMiterlimit='10'\n      strokeLinecap='round'\n    />\n    <path\n      d='M50.0771 1.68616C48.5452 3.25455 39.84 12.4339 40.3507 26.6102C40.8005 39.2424 48.2656 47.2545 50.0771 49.1026'\n      stroke={fill}\n      strokeWidth='2'\n      strokeMiterlimit='10'\n      strokeLinecap='round'\n    />\n  </svg>\n);\n\nexport default ConvergeIcon;\n","import React from 'react';\nimport PlusIcon from '../../../../../assets/icons/PlusIcon';\nimport { WHATSAPP_BM_SERVICE } from '../../../../../utils';\nimport WhatsAppBNIcon from '../../../../../assets/icons/WhatsAppBNIcon';\nimport ConvergeIcon from '../../../../../assets/icons/ConvergeIcon';\nimport { CustomerProfile } from '../../../../../models';\n\nexport const ProductCardsData = [\n  {\n    title: 'WhatsApp Business Messaging',\n    description: 'Targeted campaign messaging that drives customer engagement through WhatsApp.',\n    icon: <WhatsAppBNIcon />,\n    launching: false,\n    route: 'whatsapp-business-messaging',\n  },\n  // {\n  //   title: 'IPX Advanced Analytics',\n  //   description:\n  //     'Enhance your network performance and optimise subscriber experience with advanced tools & features',\n  //   icon: <IpxIcon />,\n  //   launching: false,\n  //   route: 'ipx-analytics',\n  // },\n  {\n    title: 'Converge (Network-as-a-Service)',\n    description:\n      \"Manage and maintain your business' Fibre Solutions seamlessly with your self-service NaaS portal.\",\n    icon: <ConvergeIcon />,\n    launching: false,\n    route: '/converge',\n  },\n  // {\n  //   title: 'SMS Hub',\n  //   description:\n  //     'Connect and manage global SMS traffic with reliable delivery for your enterprise communications.',\n  //   icon: <SmsHubIcon />,\n  //   launching: false,\n  //   route: 'sms-hub',\n  // },\n  {\n    title: 'New Services Coming Soon',\n    description:\n      'Our suite of solutions is expanding. Additional service offerings will appear here as they are introduced',\n    icon: <PlusIcon />,\n    launching: true,\n  },\n];\n\nexport const getProductCardsData = (\n  userActiveServices: string[] | undefined,\n  retrievedProfile: CustomerProfile | undefined\n): any => {\n  if (!userActiveServices) {\n    return ProductCardsData;\n  }\n\n  const hasWhatsAppService = userActiveServices.includes(WHATSAPP_BM_SERVICE);\n\n  // const hasIPXService = userActiveServices.includes(IPX_ADVANCED_ANALYTICS_SERVICE);\n\n  //const hasSMSHubService = userActiveServices.some((service) => SMS_HUB_SERVICES.includes(service));\n\n  const hasConvergeService = retrievedProfile?.isFixed;\n\n  const updatedCards = [...ProductCardsData];\n\n  if (!hasWhatsAppService) {\n    updatedCards[0] = {\n      ...updatedCards[0],\n      serviceAvailable: true,\n      route: '',\n      launching: undefined,\n    };\n  }\n\n  // if (!hasIPXService) {\n  //   updatedCards[1] = {\n  //     ...updatedCards[1],\n  //     serviceAvailable: true,\n  //     route: '',\n  //     launching: undefined,\n  //     icon: <InactiveIpxIcon />,\n  //   };\n  // }\n\n  if (!hasConvergeService) {\n    updatedCards[1] = {\n      ...updatedCards[1],\n      serviceAvailable: true,\n      route: '',\n      launching: undefined,\n      icon: <ConvergeIcon />,\n    };\n  }\n\n  // if (!hasSMSHubService) {\n  //   updatedCards[3] = {\n  //     ...updatedCards[3],\n  //     serviceAvailable: true,\n  //     route: '',\n  //     launching: undefined,\n  //     icon: <SmsHubIcon />,\n  //   };\n  // }\n\n  return updatedCards;\n};\n","export const InfoCardsData = [\n  {\n    title: 'COMMUNICATIONS PLATFORMS',\n    label: '',\n    description: 'Access to the most extensive mobile network infrastructure in Africa',\n    url: '',\n    image: process.env.REACT_APP_ASSETS_URL + 'insight-financial-results%40x2.webp',\n  },\n  {\n    title: 'CONNECTIVITY FOOTPRINT',\n    label: '47',\n    description: 'international points of presence in Africa and the Middle East',\n    url: '',\n    image: process.env.REACT_APP_ASSETS_URL + 'insight-footprint%40x2.webp',\n  },\n  {\n    title: 'FIBRE NETWORK',\n    label: '114,000',\n    description: 'Kilometres of open-access fibre across the African continent',\n    url: '',\n    image: process.env.REACT_APP_ASSETS_URL + 'insight-network%40x2.webp',\n  },\n];\n","import { ServiceInventoryResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport const getServiceInventory = async (\n  email: string,\n  correlationId: string,\n  token: string\n): Promise<ServiceInventoryResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-service-inventory`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n      token,\n    },\n  });\n  return response.data;\n};\n","import { TokenResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport const getToken = async (correlationId: string): Promise<TokenResponse> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-central-token`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n    },\n  });\n  return response.data;\n};\n","import { CircularIndeterminate } from '@mtnkente/paragon-indicators';\nimport React from 'react';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nexport const Overlay = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 9999; /* Make sure it covers everything */\n`;\n\nexport const OverlayStyle = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  padding-left: 320px;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column;\n`;\n\nexport const Text = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n    `;\n  }}\n`;\nexport const MessageBox = styled.h1`\n  background-color: #fff;\n  padding: 30px 50px;\n  border-radius: 10px;\n  font-size: 18px;\n  font-weight: 500;\n  color: #333;\n  text-align: center;\n\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 15px;\n`;\ninterface LoadingProps {\n  isLoading: boolean;\n}\n\nconst Loading: React.FC<LoadingProps> = ({ isLoading }) => {\n  if (!isLoading) return null;\n\n  return (\n    <Overlay>\n      <CircularIndeterminate data-testid='circular' size='large' />\n    </Overlay>\n  );\n};\n\nexport default Loading;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const Overlay = styled.div`\n  ${({ theme: { colors } }): DefaultTheme => {\n    return css`\n      display: flex;\n      position: fixed;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      justify-content: center;\n      align-items: center;\n      background: ${colors['colour-opacity-higher-inverse']};\n      z-index: 1050;\n    `;\n  }}\n`;\n\nexport const Modal = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      width: 508px;\n      padding: ${floats['padding-2xlarge']};\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['padding-large']};\n      z-index: 11;\n\n      border-radius: ${floats['corner-radius-small']};\n      background: #fff;\n      box-shadow: 0px var(--shadow-level-3-y, 16px) var(--shadow-level-3-blur, 24px)\n        var(--shadow-level-3-spread, 4px) var(--shadow-level-3-colour, rgba(0, 0, 0, 0.08));\n    `;\n  }}\n`;\n","import React, { useEffect, useState } from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Overlay, Modal } from './LogoutModal.styled';\nimport { StandardButton, ComboButtons } from '@mtnkente/paragon-buttons';\nimport { ModalProps } from '../../../types/logout-modal.types';\n\nconst LogoutModal: React.FC<ModalProps> = ({ onContinue, onLogout, timeRemaining }) => {\n  const [close, setClose] = useState(false);\n  const [timeLeft, setTimeLeft] = useState(timeRemaining);\n\n  useEffect(() => {\n    if (timeLeft > 0 && !close) {\n      const intervalId = setInterval(() => {\n        setTimeLeft((prevTime) => prevTime - 1);\n      }, 1000);\n\n      if (timeLeft <= 1) {\n        onLogout();\n        setClose(true);\n      }\n\n      return (): void => clearInterval(intervalId);\n    }\n  }, [timeLeft, close, onLogout]);\n\n  const formatTime = (time: number): string => {\n    const minutes = Math.floor(time / 60);\n    const seconds = time % 60;\n    return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n  };\n\n  return (\n    <>\n      {!close && (\n        <ThemeProvider mode='light' platform='bayobab'>\n          <Overlay>\n            <Modal>\n              <Text $fontStyle='title-small-bold'>Are you still there?</Text>\n              <Text $fontStyle='body-large-regular'>\n                For your security, your session will automatically log out in{' '}\n                <b>{formatTime(timeLeft)}</b>\n              </Text>\n              <div>\n                <ComboButtons>\n                  <StandardButton\n                    data-testid='stay logged in'\n                    $variant='primary'\n                    label='Stay Logged In'\n                    onClick={() => {\n                      setClose(true);\n                      onContinue();\n                    }}\n                  />\n                  <StandardButton\n                    data-testid='logout'\n                    $variant='secondary'\n                    label='Log Out Now'\n                    onClick={() => {\n                      setClose(true);\n                      onLogout();\n                    }}\n                  />\n                </ComboButtons>\n              </div>\n            </Modal>\n          </Overlay>\n        </ThemeProvider>\n      )}\n    </>\n  );\n};\n\nexport default LogoutModal;\n","import apiClient from '../interceptors/auth-interceptor';\nimport { ServiceRequestResponse } from '../models/request-response';\n\nexport const getServiceRequests = async (\n  emailAddress: string,\n  correlationId: string,\n  token?: string\n): Promise<ServiceRequestResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-service-requests`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      Authorization: `Bearer ${token}`,\n      correlationId,\n      emailAddress,\n      requestType: 'RetrieveRequests',\n      token,\n    },\n  });\n  return response.data;\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-floating-promises */\nimport React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\n\ndeclare global {\n  interface Window {\n    warningTimer: number;\n    idleTimer: number;\n  }\n}\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { CORRELATION_ID } from './constants';\nimport { useNavigate } from 'react-router-dom';\nimport { CustomerProfile, ServiceForm, ServiceInfo } from '../models';\nimport { getProfile, getServiceInventory, getToken } from '../apis';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport Loading from '../Loading/Loading';\nimport LogoutModal from '../components/authorization/logoutModal/LogoutModal';\nimport { getServiceRequests } from '../apis/get-service-requests';\n\ninterface ProfileContextType {\n  retrievedProfile: CustomerProfile | undefined;\n  isAuthenticated: boolean;\n  isLoading: boolean;\n  userName: string;\n  userActiveServices: Array<string | undefined>;\n  userPortalRoles: Array<string | undefined>;\n  accountActivationModalOpen?: boolean;\n  errorModalOpen?: boolean;\n  userServiceInventory: ServiceInfo[] | undefined;\n  serviceRequests?: ServiceForm[] | undefined;\n}\n\nconst ProfileContext = createContext<ProfileContextType>({\n  retrievedProfile: undefined,\n  isAuthenticated: false,\n  isLoading: true,\n  userName: '',\n  userActiveServices: [],\n  userPortalRoles: [],\n  accountActivationModalOpen: false,\n  errorModalOpen: false,\n  userServiceInventory: undefined,\n  serviceRequests: [],\n});\n\nexport const useProfile = (): ProfileContextType => useContext(ProfileContext);\n\ninterface ProfileProviderProps {\n  children: React.ReactNode;\n}\n\nexport const ProfileProvider = ({ children }: ProfileProviderProps): React.JSX.Element => {\n  const { user, isAuthenticated, isLoading, error, getAccessTokenSilently, logout } = useAuth0();\n  const [userName, setUserName] = useState('');\n  const [userActiveServices, setUserActiveServices] = useState<Array<string>>([]);\n  const [userPortalRoles, setUserPortalRoles] = useState<Array<string>>([]);\n  const correlationId = CORRELATION_ID;\n  const navigate = useNavigate();\n  const [retrievedProfile, setRetrievedProfile] = useState<CustomerProfile>();\n  const [crmToken, setCrmToken] = useState('');\n  const [token, setToken] = useState('');\n  const [accountActivationModalOpen, setAccountActivationModalOpen] = useState(false);\n  const [errorModalOpen, setErrorModalOpen] = useState(false);\n  const [userServiceInventory, setUserServiceInventory] = useState<ServiceInfo[] | undefined>(\n    undefined\n  );\n  const [serviceRequests, setServiceRequests] = useState<ServiceForm[]>();\n\n  // Inactivity management states\n  const [isInactive, setIsInactive] = useState(false);\n  const [timeRemaining, setTimeRemaining] = useState(300); // countdown for logout in seconds\n  const idleTimeout = 600000; // 10 minutes in milliseconds\n\n  const resetActivity = useCallback(() => {\n    if (isInactive) return; // Do nothing if modal is open\n\n    clearTimeout(window.idleTimer);\n    clearInterval(window.warningTimer);\n    setIsInactive(false);\n    setTimeRemaining(300);\n\n    if (isAuthenticated) {\n      window.idleTimer = window.setTimeout(() => setIsInactive(true), idleTimeout);\n    }\n  }, [idleTimeout, isInactive, isAuthenticated]);\n\n  const handleContinueSession = () => {\n    // Reset state and timers explicitly\n    clearTimeout(window.idleTimer);\n    clearInterval(window.warningTimer);\n    setIsInactive(false); // Close modal\n    setTimeRemaining(300); // Reset countdown\n\n    // Restart the idle timer\n    if (isAuthenticated) {\n      window.idleTimer = window.setTimeout(() => setIsInactive(true), idleTimeout);\n    }\n  };\n\n  const handleLogout = () => {\n    logout({\n      logoutParams: { returnTo: window.location.origin, federated: true },\n      clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n    });\n    localStorage.clear();\n    sessionStorage.clear();\n  };\n\n  useEffect(() => {\n    if (!isAuthenticated) return; // Only set activity tracking when authenticated\n\n    // Track user activity\n    const activityEvents = ['mousemove', 'mousedown', 'keypress', 'scroll', 'touchstart'];\n    activityEvents.forEach((event) => window.addEventListener(event, resetActivity));\n    window.idleTimer = window.setTimeout(() => setIsInactive(true), idleTimeout);\n\n    return () => {\n      // Cleanup on unmount\n      clearTimeout(window.idleTimer);\n      clearTimeout(window.warningTimer);\n      activityEvents.forEach((event) => window.removeEventListener(event, resetActivity));\n    };\n  }, [resetActivity, isAuthenticated]);\n\n  useEffect(() => {\n    if (isInactive && isAuthenticated) {\n      // Ensure this only runs when authenticated\n      window.warningTimer = window.setInterval(() => {\n        setTimeRemaining((time) => Math.max(0, time - 1)); // Prevents timeRemaining from going below 0\n      }, 1000);\n\n      if (timeRemaining <= 0) {\n        handleLogout();\n      }\n    }\n\n    return () => {\n      clearInterval(window.warningTimer); // Clear interval on cleanup\n    };\n  }, [isInactive, timeRemaining, handleLogout, isAuthenticated]);\n\n  const [currentUrl] = useState(window.location.pathname);\n  useEffect(() => {\n    if (!isAuthenticated) return;\n\n    const fetchUserToken = async (): Promise<string> => getAccessTokenSilently();\n\n    fetchUserToken()\n      .then((userToken: string) => {\n        if (userToken) {\n          setToken(userToken);\n          sessionStorage.setItem('accessToken', userToken);\n          if (currentUrl === '/') {\n            navigate('/dashboard');\n          } else {\n            navigate(currentUrl);\n          }\n          // navigate('/dashboard');\n        }\n      })\n      .catch(() => {\n        handleLogout();\n      });\n  }, [token, isAuthenticated]);\n\n  useEffect(() => {\n    if (!error) return;\n    if (isLoading) return;\n\n    if (error?.message?.toLowerCase() === 'no active profile') {\n      setAccountActivationModalOpen(true);\n    } else {\n      setErrorModalOpen(true);\n    }\n  }, [isLoading, error]);\n\n  useEffect(() => {\n    setUserName(String(user?.name?.split(' ')[0]));\n\n    let portalRoles = user?.userPortalRoles;\n    if (!portalRoles || portalRoles.length === 0) {\n      portalRoles = retrievedProfile?.userPortalRoles ?? [];\n    }\n    setUserPortalRoles(portalRoles);\n\n    let activeServices = user?.activeServices;\n    if (!activeServices || activeServices.length === 0) {\n      activeServices = user?.activeServices ?? [];\n    }\n    setUserActiveServices(activeServices ?? []);\n\n    const fetchServiceInventory = async (): Promise<void> => {\n      if (!crmToken) return;\n\n      try {\n        const emailAddress = user?.upn ? user?.upn : user?.email;\n        const response = await getServiceInventory(emailAddress, correlationId, crmToken);\n        const serviceInventory = response?.data;\n\n        setUserServiceInventory(serviceInventory ?? undefined);\n      } catch (er) {\n        setUserServiceInventory(undefined);\n        console.error('Error fetching user service inventory:', er);\n      }\n    };\n\n    fetchServiceInventory().catch(console.error);\n  }, [user, retrievedProfile]);\n\n  useEffect(() => {\n    const fetchServiceRequests = async (): Promise<void> => {\n      if (!retrievedProfile?.emailAddress) return;\n\n      try {\n        const requests = await getServiceRequests(\n          retrievedProfile?.emailAddress,\n          correlationId,\n          token\n        );\n        setServiceRequests((requests.data ?? []).slice().reverse());\n      } catch (err) {\n        console.error('Error fetching service requests:', err);\n      }\n    };\n\n    fetchServiceRequests().catch(console.error);\n  }, [retrievedProfile, token]);\n\n  useEffect(() => {\n    if (!token) return;\n\n    const fetchToken = async (): Promise<void> => {\n      try {\n        const response = await getToken(correlationId);\n        const accessToken = response?.data?.accessToken;\n\n        if (accessToken) {\n          setCrmToken(accessToken);\n          sessionStorage.setItem('cToken', accessToken);\n        }\n      } catch (err) {\n        console.error('Error fetching token:', err);\n      }\n    };\n\n    fetchToken().catch(console.error);\n  }, [token, correlationId]);\n\n  useEffect(() => {\n    if (!crmToken) return;\n    if (!token) return;\n\n    const fetchProfile = async (): Promise<void> => {\n      if (!crmToken) return;\n\n      try {\n        const emailAddress = user?.upn ? user?.upn : user?.email;\n        const response = await getProfile(emailAddress, correlationId, crmToken);\n        const profileDetails = response?.data?.profileDetails as CustomerProfile;\n\n        setRetrievedProfile(profileDetails);\n        sessionStorage.setItem('profile', JSON.stringify(profileDetails));\n      } catch (er) {\n        console.error('Error fetching profile:', er);\n      }\n    };\n\n    fetchProfile().catch(console.error);\n  }, [crmToken, token]);\n\n  const isPublicRoute = (path: string): boolean => {\n    // Extract the base path (ignore anything after `#`)\n    const [basePath] = path.split('#');\n\n    // Define public routes\n    const publicRoutes = [\n      '/',\n      '/looking-glass',\n      '/terms-of-use',\n      '/frequently-asked-questions',\n      '/wabsp-api-doc',\n      '/docs/*',\n      '/privacy-notice',\n      '/peering-information/policy',\n      '/peering-information/list',\n      '/peering-information/request',\n    ];\n\n    // Match the base path first\n    if (publicRoutes.includes(basePath)) {\n      return true;\n    }\n\n    // Special case: Allow all `/docs/reach/*` paths\n    if (basePath.startsWith('/docs/reach')) {\n      return true;\n    }\n\n    return false;\n  };\n\n  useEffect((): void => {\n    if (!isLoading && !isAuthenticated && !isPublicRoute(window.location.pathname)) {\n      navigate('/');\n    }\n  }, [isLoading, isAuthenticated, navigate]);\n\n  if (isLoading) {\n    return (\n      <ThemeProvider mode='light' platform='bayobab'>\n        <Loading isLoading={true} />\n      </ThemeProvider>\n    );\n  }\n\n  if (error) {\n    localStorage.clear();\n    sessionStorage.clear();\n    navigate('/');\n  }\n\n  return (\n    <ProfileContext.Provider\n      value={{\n        retrievedProfile,\n        isAuthenticated,\n        isLoading,\n        userName,\n        userActiveServices,\n        userPortalRoles,\n        accountActivationModalOpen,\n        errorModalOpen,\n        userServiceInventory,\n        serviceRequests,\n      }}\n    >\n      {children}\n      {isInactive && (\n        <LogoutModal\n          onContinue={handleContinueSession}\n          onLogout={handleLogout}\n          timeRemaining={timeRemaining}\n        />\n      )}\n    </ProfileContext.Provider>\n  );\n};\n","import { ProfileResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport const getProfile = async (\n  email: string,\n  correlationId: string,\n  token: string\n): Promise<ProfileResponse> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-central-profile`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n      token,\n    },\n  });\n  return response.data;\n};\n","export const resolveFeatureAppUrl = async (\n  baseUrl: string,\n  fileName: string\n): Promise<string | null> => {\n  try {\n    const response = await fetch(`${baseUrl}fa-main/asset-manifest.json`, { cache: 'no-cache' });\n    const manifest = await response.json();\n    const hashedFile = manifest[fileName];\n    if (!hashedFile) {\n      throw new Error(`File ${fileName} not found in manifest`);\n    }\n    return `${baseUrl}fa-main${hashedFile}`;\n  } catch (error) {\n    console.error('Error resolving feature app URL:', error);\n    return null;\n  }\n};\n","import { useEffect, useState } from 'react';\nimport { resolveFeatureAppUrl } from '../utils/resolve-feature-app-url';\n\nexport const useFeatureAppUrls = (\n  envs: { [key: string]: string },\n  fileName: string\n): { [key: string]: string | null } => {\n  const [urls, setUrls] = useState<{ [key: string]: string | null }>({});\n\n  useEffect(() => {\n    const fetchUrls = async (): Promise<void> => {\n      const resolvedUrls: { [key: string]: string | null } = {};\n      for (const [key, baseUrl] of Object.entries(envs)) {\n        resolvedUrls[key] = await resolveFeatureAppUrl(baseUrl, fileName);\n      }\n      setUrls(resolvedUrls);\n    };\n\n    fetchUrls().catch((error) => console.error('Error fetching feature app URLs:', error));\n  }, []);\n\n  return urls;\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport React, { ReactElement } from 'react';\nimport { FeatureAppLoader, CustomFeatureAppRenderingParams } from '@feature-hub/react';\nimport { Col } from '@mtnkente/paragon-foundation';\n\nimport ErrorUi from '../../../../../ErrorUI/ErrorUI';\nimport { useFeatureAppUrls } from '../../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../../Loading/Loading';\n\nconst EnquireModal = ({ closeModal, content }: any): JSX.Element => {\n  const envs = {\n    enquireModal: process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.enquireModal) {\n    return <Loading isLoading={true} />;\n  }\n\n  return (\n    <FeatureAppLoader\n      featureAppId='fa-enquire-modal'\n      src={urls.enquireModal}\n      moduleType=''\n      config={{\n        result: true,\n        title: 'Enquire about this product',\n        content: content,\n        rightButton: closeModal,\n        close: closeModal,\n      }}\n      onError={(error: unknown): unknown => error}\n    >\n      {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n        return error ? (\n          <Col\n            style={{\n              flex: '1',\n              width: '100%',\n              padding: '0px',\n            }}\n            $xs={0}\n          >\n            <ErrorUi productName={'Modal'} />\n          </Col>\n        ) : (\n          <Col\n            style={{\n              flex: '1',\n              width: '100%',\n              padding: '0px',\n            }}\n            $xs={0}\n          >\n            {featureAppNode}\n          </Col>\n        );\n      }}\n    </FeatureAppLoader>\n  );\n};\n\nexport default EnquireModal;\n","export const BannerData = {\n  state: 'Navigator',\n  backgroundColor: 'baige',\n  icon: [\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/icon-green-whatsapp.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/app-icon-ipx.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/converge/app-icon.webp',\n    //process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/promo-icon-sms.webp',\n  ],\n  title: [\n    'WhatsApp Business Messaging',\n    'IPX Advanced Analytics',\n    'Converge (Network-as-a-Service)',\n    //'SMS Hub',\n  ],\n  bodyText: [\n    'Unlock complete business solutions with our expertise in automation, provisioning, sales, invoicing, and reporting analytics.',\n    'Your IPX platform for secure, seamless business connectivity. Boost network performance and optimise your experience with advanced tools.',\n    'Seamlessly manage Fibre services with Converge - Bayobab’s self-service NaaS portal for upgrades and support.',\n    //'Seamlessly connect and manage global SMS traffic with a secure, high-capacity SMS Hub. Ensure reliable delivery for your enterprise communications.',\n  ],\n  image: [\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/wbsp/desktop-WBM-promo.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/ipx-analytics/desktop-IPX-promo.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Converge/desktop-converge-promo.webp',\n    //process.env.REACT_APP_ASSETS_URL + 'Dashboard/sms-hub/desktop-SMS-promo.webp',\n  ],\n  mobileImage: [\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/wbsp/mobile-WBM-promo.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/ipx-analytics/mobile-IPX-promo.webp',\n    process.env.REACT_APP_ASSETS_URL + 'Converge/mobile-Converge-promo.webp',\n    //process.env.REACT_APP_ASSETS_URL + 'Dashboard/sms-hub/mobile-SMS-promo.webp',\n  ],\n  backgroundImage: ['', ''],\n  linkLabel: [\n    'Contact your account manager for more.',\n    'Contact your account manager for more.',\n    'Contact your account manager for more.',\n    // 'Contact your account manager for more.',\n  ],\n};\n","import apiClient from '../interceptors/auth-interceptor';\nimport { NotificationResponse } from '../models/notification-response';\n\nexport const getNotification = async (correlationId: string): Promise<NotificationResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-get-notifications`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      userId: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n    },\n  });\n\n  return response.data;\n};\n","import { MappedNotification } from '../types/mapped-notification';\n\nexport function formatDateLabel(timestamp: string): string {\n  if (!timestamp || typeof timestamp !== 'string' || !timestamp.includes(' ')) {\n    return '';\n  }\n\n  const [datePart, timePart] = timestamp.split(' ');\n  const [day, month, year] = datePart.split('/').map(Number);\n  const [hours, minutes, seconds] = timePart.split(':').map(Number);\n\n  const givenDate = new Date(year, month - 1, day, hours, minutes, seconds);\n  const today = new Date();\n\n  const givenDateOnly = new Date(\n    givenDate.getFullYear(),\n    givenDate.getMonth(),\n    givenDate.getDate()\n  );\n  const todayOnly = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n\n  const differenceInTime = todayOnly.getTime() - givenDateOnly.getTime();\n  const differenceInDays = Math.floor(differenceInTime / (1000 * 60 * 60 * 24));\n\n  return differenceInDays === 0\n    ? 'Today'\n    : `${differenceInDays} day${differenceInDays > 1 ? 's' : ''} ago`;\n}\n\nexport function checkUnreadNotifications(notifications: MappedNotification[]): string | null {\n  const hasUnread = notifications.some((notification) => notification?.status === 'unread');\n\n  if (hasUnread) {\n    return 'warning';\n  }\n  return 'disabled';\n}\n","import apiClient from '../interceptors/auth-interceptor';\n\ninterface NotificationResponse {\n  transactionId: string;\n  correlationId: string;\n  code: string;\n  timestamp: string;\n  data: string;\n  message: string;\n  status: number;\n}\n\nexport const editNotification = async (\n  correlationId: string,\n  messageId: string,\n  status: string\n): Promise<NotificationResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-edit-notifications?messageId=${messageId}&status=${status}`;\n\n  const response = await apiClient.put(url, null, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n    },\n  });\n\n  return response.data;\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  BannerMobileWrapper,\n  DashboardWrapper,\n  HeaderWrapper,\n} from './Dashboard.style';\nimport { Logout, UserGroup, Notification, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { getProductCardsData, ProductCardsData } from './configs/ProductCardsData';\nimport { InfoCardsData } from './configs/InfoCardsData';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport EnquireModal from './enquiry-modal/EnquireModal';\nimport { BannerData } from './configs/BannerData';\nimport { CustomerProfile } from '../../../../models';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { ToastDescription, ToastNotification, ToastProvider } from '@mtnkente/paragon-overlays';\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  isOpenModal: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const MyDashboard = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n  // isOpenModal,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userActiveServices } = useProfile();\n  const [isModalOpen, setIsModalOpen] = useState<boolean>(false);\n  const [content, setContent] = useState<String>('');\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [err, setErr] = useState<string | null>(null);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setErr('Failed to fetch notifications. Please try again later.');\n        })\n        .finally(() => {\n          setLoading(false);\n        });\n    };\n\n    if (!profile) {\n      return;\n    }\n    fetchNotifications();\n  }, [profile, isSupueruser]);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    servicesList: process.env.REACT_APP_FA_DYNAMIC_CARD_HOLDER_URL ?? '',\n    insights: process.env.REACT_APP_FA_DYNAMIC_CARD_HOLDER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      alertStatus: checkUnreadNotifications(notifications),\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'dashboard',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [profile, notifications]\n  );\n\n  const openEnquireModal = (): void => {\n    setIsModalOpen(true);\n  };\n\n  const closeEnquireModal = (): void => {\n    setIsModalOpen(false);\n  };\n\n  const extendedBannerData = {\n    ...BannerData,\n    clickHandler: [\n      (): void => {},\n      (): void => {\n        openEnquireModal();\n        setContent('WhatsApp');\n      },\n      (): void => {\n        openEnquireModal();\n        setContent('IPX');\n      },\n      (): void => {},\n    ],\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {err !== null && !loading && (\n        <ToastProvider duration={3000} $inverse={false}>\n          <ToastNotification\n            style={{ position: 'fixed', top: '1rem', right: '1rem' }}\n            onOpenChange={() => err}\n            title={'Error loading notifications.'}\n            $inverse={false}\n          >\n            <ToastDescription $inverse={false}>\n              An error occured while trying to load notifications. Please try again later.\n            </ToastDescription>\n          </ToastNotification>\n        </ToastProvider>\n      )}\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          {!loading && urls.header && (\n            <HeaderWrapper>\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </HeaderWrapper>\n          )}\n          <BannerMobileWrapper>\n            {urls.banner ? (\n              <FeatureAppLoader\n                featureAppId='fa-banner'\n                src={urls.banner}\n                moduleType=''\n                config={{ bannerData: extendedBannerData }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Banner'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            ) : (\n              <Loading isLoading={true} />\n            )}\n          </BannerMobileWrapper>\n          {isModalOpen && <EnquireModal closeModal={closeEnquireModal} content={content} />}\n          {urls.servicesList && (\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-services-list'\n                src={urls.servicesList}\n                moduleType=''\n                config={{\n                  state: 'active',\n                  cards: getProductCardsData(\n                    userActiveServices.filter(\n                      (service): service is string => service !== undefined\n                    ),\n                    profile\n                  ),\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Service List'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          )}\n\n          {urls.insights && (\n            <FeatureAppContainer>\n              <BannerMobileWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-insights'\n                  src={urls.insights}\n                  moduleType=''\n                  config={{ state: 'insights', cards: InfoCardsData }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Insights'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </BannerMobileWrapper>\n            </FeatureAppContainer>\n          )}\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst reportWebVitals = (onPerfEntry?: any): void => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals')\n      .then(({ onCLS, onFCP, onLCP, onTTFB }) => {\n        onCLS(onPerfEntry);\n        onFCP(onPerfEntry);\n        onLCP(onPerfEntry);\n        onTTFB(onPerfEntry);\n      })\n      .catch(console.error);\n  }\n};\nexport default reportWebVitals;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    // padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n    //   ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const Wrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n    margin-bottom: 400px;\n  }\n\n  @media only screen and (max-width: 412px) {\n    padding: 20px;\n    margin-bottom: 280px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 912px) {\n    padding: 0px 20px 30px 20px;\n    margin-bottom: 300px;\n  }\n\n  @media only screen and (min-width: 913px) and (max-width: 1025px) {\n    padding: 0px 20px 30px 20px;\n    margin-bottom: 550px;\n  }\n\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer, HeaderWrapper, Wrapper } from './LogSupportTicket.styled';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst LogSupportTicket = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    supportTicket: process.env.REACT_APP_SUPPORT_TICKET_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'supportTicket',\n      upcomingServicesText: '',\n      supportTicketText: 'Support',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header || !urls.supportTicket) {\n    return <Loading isLoading={true} />;\n  }\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <Wrapper data-testid='log-support-ticket-app-container'>\n        <div data-testid='log-support-ticket-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-log-support-ticket'\n                src={urls.header}\n                moduleType=''\n                config={HeaderData}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Insights'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n\n          <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-log-support-ticket'\n              src={urls.supportTicket}\n              moduleType=''\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'SupportTicket'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer>\n        </div>\n      </Wrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default LogSupportTicket;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    // padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n    //   ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const Wrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer, HeaderWrapper, Wrapper } from './ProvideFeedback.styled';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst ProvideFeedback = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    provideFeedback: process.env.REACT_APP_FA_FEEDBACK_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'feedback',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: 'Help us improve our service',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.provideFeedback ? (\n        <Loading isLoading={true} />\n      ) : (\n        <Wrapper data-testid='feedback-app-container'>\n          <div data-testid='feedback-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-feedback'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Insights'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-provide-feedback'\n                src={urls.provideFeedback}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Insights'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </Wrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default ProvideFeedback;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    // padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n    //   ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const Wrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer, Wrapper } from './UpcomingServices.styled';\n\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst UpcomingServices = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const QuickQuotesData = {\n    state: 'Dashboard',\n    backgroundColor: 'clear',\n    icon: process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/app-icon-quick-quotes.webp',\n    title: 'Quick Quotes',\n    bodyText:\n      'Generate quotes, request feasibility, and negotiate prices easily with our streamlined platform. Save time, stay in control, and close deals faster.',\n    image: 'quick-quotes-image.webp',\n    backgroundImage:\n      process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/bg-quick-quotes-banner.webp',\n  };\n\n  const FibercoData = {\n    state: 'Dashboard',\n    backgroundColor: 'clear',\n    icon: process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/app-icon-fibreco-reporting.webp',\n    title: 'IP Reporting',\n    bodyText:\n      'Revolutionise network management with real-time insights into service availability, bandwidth, device reporting and performance metrics. Optimise efficiency and make informed decisions effortlessly.',\n    image: 'fiberco-image.webp',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/bg-fibreco-banner.webp',\n  };\n\n  const WhatsappData = {\n    state: 'Dashboard',\n    backgroundColor: 'clear',\n    icon: process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/app-icon-whatsapp-bsp.webp',\n    title: 'Whatsapp BSP',\n    bodyText:\n      'Power your marketing with targeted broadcast and campaign messaging, driving customer engagement and streamlined communication.',\n    image: 'whatsapp-image.webp',\n    backgroundImage:\n      process.env.REACT_APP_ASSETS_URL + 'Upcoming-Services/bg-whatsapp-bsp-banner.webp',\n  };\n\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'WhatsApp BSP',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <Wrapper data-testid='upcoming-services-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          {!loading && (\n            <FeatureAppLoader\n              featureAppId='fa-header-upcoming-service'\n              src={process.env.REACT_APP_FA_HEADER_URL + 'fa-main/main.js.br'}\n              moduleType=''\n              config={HeaderData}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Upcoming services header'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          )}\n\n          <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-quick-quote'\n              src={process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + '/fa-main/main.js.br'}\n              moduleType=''\n              config={{ bannerData: QuickQuotesData }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Dashboard Header'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer>\n          <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-voice-trading'\n              src={process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + '/fa-main/main.js.br'}\n              moduleType=''\n              config={{ bannerData: FibercoData }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Dashboard Header'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer>\n          <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-whatsapp-data'\n              src={process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + '/fa-main/main.js.br'}\n              moduleType=''\n              config={{ bannerData: WhatsappData }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Dashboard Header'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer>\n        </div>\n      </Wrapper>\n    </ThemeProvider>\n  );\n};\n\nexport default UpcomingServices;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport interface MenuOpen {\n  isMenuOpen: boolean;\n}\n\nexport const Wrapper = styled.div<MenuOpen>`\n  ${({ isMenuOpen }): DefaultTheme => {\n    return css`\n      min-height: 100vh;\n      display: flex;\n      flex-direction: column;\n      /* overflow: hidden; */\n\n      @media only screen and (max-width: 769px) {\n        display: ${isMenuOpen ? 'none' : 'flex'};\n      }\n    `;\n  }}\n`;\n\nexport const StyledText = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['caption-regular']};\n    `;\n  }}\n`;\n\nexport const Styledheader = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour,']};\n      ${typography['body-large-semibold']};\n    `;\n  }}\n`;\n\nexport const StyledsubHeader = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-semibold']};\n    `;\n  }}\n`;\n\nexport const TermsContainer = styled.div`\n  background: #f4f4f4;\n  height: 300px;\n  max-height: 300px;\n  border-radius: 8px;\n  padding: 16px;\n`;\n","import React from 'react';\nimport { Dashboard, MyProducts, Question, Feedback } from '@mtnkente/paragon-icons';\nimport { RailMenuItemInterface } from '@mtnkente/paragon-navigation';\n\nexport interface ExtendedRailMenuItemInterface extends RailMenuItemInterface {\n  redirectUrl?: string;\n  activeTab?: string;\n}\n\nconst Data = {\n  themeMode: 'light',\n  label: 'Central',\n  footer: 'Platform version 1.0.0',\n  sidebarRailMenuItems: [\n    { id: '1', label: 'Dashboard', icon: <Dashboard />, redirectUrl: '/dashboard', activeTab: '' },\n    {\n      id: '2',\n      label: 'Upcoming Services',\n      icon: <MyProducts />,\n      redirectUrl: '/upcoming-services',\n      activeTab: '/upcoming-services',\n    },\n    {\n      id: '3',\n      label: 'Log Support Ticket',\n      icon: <Question />,\n      redirectUrl: '/log-support-ticket',\n      activeTab: '/log-support-ticket',\n    },\n    {\n      id: '4',\n      label: 'Provide Feedback',\n      icon: <Feedback />,\n      redirectUrl: '/provide-feedback',\n      activeTab: '/provide-feedback',\n    },\n    {\n      id: '5',\n      label: 'Quick Quote Support Ticket',\n      icon: <Question />,\n      redirectUrl: '/quick-quote-support-ticket',\n      activeTab: '/quick-quote-support-ticket',\n    },\n  ] as unknown as ExtendedRailMenuItemInterface[],\n};\n\nexport const config = {\n  themeMode: Data.themeMode,\n  label: Data.label,\n  footer: Data.footer,\n  sidebarRailMenuItems: Data.sidebarRailMenuItems,\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = { mobile: '576px', tablet: '768px', desktop: '992px', iPadPro: '1024px' };\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 70px;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-bottom: 40px;\n      }\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n    `;\n  }}\n`;\n\nexport const LandingContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      margin-top: 80px;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-top: 16px;\n        margin-bottom: 40px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-top: 16px;\n        margin-bottom: 40px;\n      }\n    `;\n  }}\n`;\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 1rem;\n    `;\n  }}\n`;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '868px',\n  desktop: '1030px',\n  smallDesktop: '1200px',\n  imageDesktop: '1300px',\n};\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-large-bold']};\n      leading-trim: both;\n      margin-bottom: 0.75rem; /* 12px */\n      text-edge: cap;\n    `;\n  }}\n`;\nexport const ModalCard = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem;\n      }\n    `;\n  }}\n`;\n\nexport const Text = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n    `;\n  }}\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-small-bold']};\n      display: inline-flex;\n      padding: 0.5rem; /* 8px */\n      justify-content: center;\n      align-items: center;\n      gap: 0.5rem; /* 8px */\n      color: #ffffff;\n      font-size: 1rem; /* 16px */\n      font-style: normal;\n      font-weight: 600;\n      border-radius: 0.25rem; /* 4px */\n      background: #344052;\n      text-align: center;\n      leading-trim: both;\n      text-edge: cap;\n    `;\n  }}\n`;\n\nexport const ContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      align-items: center;\n      padding: 2rem 0; /* 32px */\n      border-bottom: 1px solid #e5e5e5;\n      justify-content: space-between;\n\n      cursor: pointer;\n      gap: 0.75rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        width: 100%;\n        padding: 2rem 0; /* 0px */\n        flex-direction: column;\n        align-items: flex-end;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 1rem 0;\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    `;\n  }}\n`;\nexport const InnnerContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 1.5rem; /* 24px */\n      width: 100%;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0; /* 0px */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0; /* 0px */\n      }\n    `;\n  }}\n`;\n\n// export const ContentBoxBotton = styled.div`\n//   ${(): DefaultTheme => {\n//     return css`\n//       display: flex;\n//       padding: 2rem 0; /* 32px */\n//       justify-content: space-between;\n//       gap: 1.5rem; /* 24px */\n//       @media (max-width: ${breakpoints.desktop}) {\n//       }\n\n//       @media (max-width: ${breakpoints.tablet}) {\n//         padding: 0; /* 0px */\n//       }\n\n//       @media (max-width: ${breakpoints.mobile}) {\n//         padding: 2rem 0; /* 32px */\n//         flex-direction: column;\n//         align-items: flex-end;\n//       }\n//     `;\n//   }}\n// `;\n\nexport const Card = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        // margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-left: 0;\n        margin-top: 2.5rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-left: 0px;\n        margin-top: 1.5rem;\n      }\n    `;\n  }}\n`;\n\nexport const ContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-sizing: border-box;\n      position: relative;\n      margin-bottom: 3rem;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 40px;\n        margin-right: 0px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        justify-content: flex-start;\n        align-items: center;\n        padding-bottom: 0;\n        margin-bottom: 0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        flex-direction: column;\n        margin-left: 0px;\n      }\n    `;\n  }}\n`;\n\nexport const MainContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      padding: 0 10rem;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.smallDesktop}) {\n        padding: 0 1.25rem; /* 5rem */\n      }\n      @media (max-width: ${breakpoints.desktop}) {\n        padding: 0 2rem; /* 32px */\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        padding: 0 1rem; /* 16px */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0 1rem; /* 16px */\n      }\n    `;\n  }}\n`;\n\nexport const SubHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      flex: 1 0 0;\n      color: ${colors['text-embed-text-colour'] || '#344052'};\n      ${typography['headline-large']};\n      margin: 1.5rem 0; /* 12px */\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        ${typography['title-large-bold']};\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        ${typography['title-large-bold']};\n      }\n    `;\n  }}\n`;\n\nexport const Icon = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-large-regular']};\n    `;\n  }}\n`;\n\nexport const IconContainer = styled.div`\n  display: flex;\n  width: 4rem;\n  height: 4rem;\n  padding: 0.5rem;\n  justify-content: center;\n  align-items: center;\n`;\n\nexport const Contant = styled.div`\n  width: 100%;\n`;\n\nexport const ImageContainer = styled.div`\n  max-width: 31.9rem;\n\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    margin-right: 0; /* 0px */\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-right: 0; /* 0px */\n  }\n`;\nexport const StyledImageContainer = styled.div`\n  max-width: 510px;\n  margin-right: 6rem;\n  margin-bottom: 6rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  @media (max-width: ${breakpoints.imageDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.smallDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.desktop}) {\n    max-width: 400px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-right: 0px;\n    margin-bottom: 16px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-bottom: 0;\n  }\n`;\n\ninterface ImageProps {\n  img: string;\n}\n\nexport const Image = styled.div<ImageProps>`\n  ${(): DefaultTheme => {\n    return css`\n      width: 26.1875rem;\n      height: 26.1875rem;\n      margin-top: 4.25rem;\n      flex-shrink: 0;\n      border-radius: 1.5rem; /* 24px */\n      background-image: url(${process.env.REACT_APP_ASSETS_URL +\n      '_Pre-login/network-tools-illustration.webp'});\n      background-size: cover;\n      background-position: center;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-top: 0.5rem;\n        width: 24.125rem;\n        height: 19.8125rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        height: 19rem; /* 328px */\n        width: 19rem; /* 328px */\n        align-self: center;\n      }\n    `;\n  }}\n`;\n\nexport const LinkBotton = styled.div`\n  ${({ theme }: { theme: DefaultTheme }): DefaultTheme['typography']['label-small-regular'] =>\n    theme.typography['label-small-regular']};\n  display: flex;\n  padding: 16px 24px;\n  justify-content: center;\n  align-items: center;\n  gap: 0;\n  border-radius: 100px;\n  background: #53e0cc;\n  cursor: pointer;\n  width: 3.75rem; /* 60px */\n  height: 2.8rem; /* 40px */\n  &:hover {\n    background: #53e0c0;\n  }\n`;\n\nexport const TopImgContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n      display: none;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: block;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: block;\n      }\n    `;\n  }}\n`;\n\nexport const TopContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        // margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: none;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: none;\n      }\n    `;\n  }}\n`;\n","import { useState, useEffect } from 'react';\n\nconst useResponsiveSize = (defaultSize: number, mobileSize: number): number => {\n  const [size, setSize] = useState(defaultSize);\n\n  useEffect(() => {\n    const handleResize = (): void => {\n      setSize(window.innerWidth <= 768 ? mobileSize : defaultSize);\n    };\n\n    window.addEventListener('resize', handleResize);\n    handleResize();\n\n    return (): void => window.removeEventListener('resize', handleResize);\n  }, [defaultSize, mobileSize]);\n\n  return size;\n};\n\nexport default useResponsiveSize;\n","import React from 'react';\nimport useResponsiveSize from './hooks/icon-size';\n\nexport interface IconProps {\n  fill?: string;\n}\n\nexport const ClipPathGroup = (): JSX.Element => {\n  return (\n    <svg xmlns='http://www.w3.org/2000/svg' width='54' height='57' viewBox='0 0 50 58' fill='none'>\n      <path\n        d='M46.3325 14.4663L43.6822 17.1166'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n      />\n      <path\n        d='M25 56.1318C38.2548 56.1318 49 45.3867 49 32.1318C49 18.877 38.2548 8.13184 25 8.13184C11.7452 8.13184 1 18.877 1 32.1318C1 45.3867 11.7452 56.1318 25 56.1318Z'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n      />\n      <path\n        d='M24.4525 7.39693V1.5'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M29.2761 1.5H20'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M47.5517 15.8842L45.1134 13.0352'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M8.61249 31.9785C8.78476 23.153 16.0201 16.0899 24.5143 16.0767C32.558 16.0634 39.5681 22.3579 40.4162 30.6534'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M25.1769 35.2792C26.2747 35.2792 27.1647 34.3892 27.1647 33.2914C27.1647 32.1936 26.2747 31.3037 25.1769 31.3037C24.0791 31.3037 23.1892 32.1936 23.1892 33.2914C23.1892 34.3892 24.0791 35.2792 25.1769 35.2792Z'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n      />\n      <path\n        d='M17 24.5L24 31.5'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M2.36493 15.5659L5.01524 18.2162'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n      />\n      <path\n        d='M1.14575 16.9838L3.58403 14.1348'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n    </svg>\n  );\n};\n\nexport const Peering = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='-5 -5 64 69'\n      fill='none'\n    >\n      <path\n        d='M12.0731 14V7.197C12.0731 4.05063 14.6237 1.5 17.7701 1.5H46.8761C50.0224 1.5 52.5731 4.05063 52.5731 7.197V49.803C52.5731 52.9494 50.0224 55.5 46.8761 55.5H17.7701C14.6237 55.5 12.0731 52.9494 12.0731 49.803V41.5'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M27 10.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M27 17.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M28 24.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M28 31.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M28 38.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M22 45.5H46'\n        stroke='#344052'\n        strokeWidth='1.8'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M5.04975 33.5498L1.58358 37.9906C0.652084 39.1921 0.854585 40.9201 2.05608 41.8516L2.74459 42.3916C3.24409 42.7831 3.85159 42.9721 4.43209 42.9721C5.25559 42.9721 6.06558 42.6076 6.60558 41.9056L10.3083 37.1617L9.5 37.0001L9.28083 36.8539L5.82259 41.2846C5.48509 41.7166 4.98559 41.9596 4.44559 41.9596C4.05409 41.9596 3.68959 41.8381 3.37909 41.5951L2.69059 41.0551C2.32609 40.7716 2.09659 40.3531 2.02909 39.8941C1.97509 39.4351 2.09658 38.9761 2.38008 38.6116L5.76931 34.2694L5.04975 33.5498Z'\n        fill='#344052'\n      />\n      <path\n        d='M5.04975 33.5498L5.29723 33.3023L5.01737 33.0225L4.77384 33.3345L5.04975 33.5498ZM1.58358 37.9906L1.30768 37.7752L1.30698 37.7761L1.58358 37.9906ZM2.05608 41.8516L2.27209 41.5762L2.27053 41.5749L2.05608 41.8516ZM2.74459 42.3916L2.52859 42.667L2.52868 42.667L2.74459 42.3916ZM6.60558 41.9056L6.32967 41.6902L6.32817 41.6922L6.60558 41.9056ZM10.3083 37.1617L10.5842 37.3771L10.9333 36.9298L10.377 36.8185L10.3083 37.1617ZM9.5 37.0001L9.30585 37.2913L9.36347 37.3297L9.43136 37.3433L9.5 37.0001ZM9.28083 36.8539L9.47497 36.5627L9.20475 36.3826L9.00492 36.6386L9.28083 36.8539ZM5.82259 41.2846L6.09839 41.5L6.09849 41.4999L5.82259 41.2846ZM3.37909 41.5951L3.16309 41.8705L3.16338 41.8707L3.37909 41.5951ZM2.69059 41.0551L2.90659 40.7797L2.90546 40.7788L2.69059 41.0551ZM2.02909 39.8941L1.68134 39.935L1.68281 39.945L2.02909 39.8941ZM2.38008 38.6116L2.10418 38.3962L2.10381 38.3967L2.38008 38.6116ZM5.76931 34.2694L6.04521 34.4847L6.23565 34.2407L6.0168 34.0219L5.76931 34.2694ZM4.77384 33.3345L1.30768 37.7752L1.85949 38.2059L5.32565 33.7652L4.77384 33.3345ZM1.30698 37.7761C0.25936 39.1274 0.484394 41.0759 1.84164 42.1282L2.27053 41.5749C1.22478 40.7642 1.04481 39.2567 1.86019 38.205L1.30698 37.7761ZM1.84009 42.127L2.52859 42.667L2.96058 42.1162L2.27208 41.5762L1.84009 42.127ZM2.52868 42.667C3.09319 43.1095 3.77775 43.3221 4.43209 43.3221V42.6221C3.92543 42.6221 3.39498 42.4566 2.96049 42.1161L2.52868 42.667ZM4.43209 43.3221C5.35882 43.3221 6.27351 42.9113 6.883 42.119L6.32817 41.6922C5.85766 42.3038 5.15235 42.6221 4.43209 42.6221V43.3221ZM6.88149 42.1209L10.5842 37.3771L10.0324 36.9464L6.32968 41.6902L6.88149 42.1209ZM10.377 36.8185L9.56864 36.6569L9.43136 37.3433L10.2397 37.5049L10.377 36.8185ZM9.69415 36.7088L9.47497 36.5627L9.08668 37.1452L9.30585 37.2913L9.69415 36.7088ZM9.00492 36.6386L5.54668 41.0692L6.09849 41.4999L9.55673 37.0693L9.00492 36.6386ZM5.54678 41.0691C5.27523 41.4167 4.87723 41.6096 4.44559 41.6096V42.3096C5.09394 42.3096 5.69494 42.0164 6.09839 41.5L5.54678 41.0691ZM4.44559 41.6096C4.12998 41.6096 3.84193 41.5128 3.59479 41.3194L3.16338 41.8707C3.53724 42.1633 3.97819 42.3096 4.44559 42.3096V41.6096ZM3.59508 41.3197L2.90658 40.7797L2.47459 41.3305L3.16309 41.8705L3.59508 41.3197ZM2.90546 40.7788C2.61773 40.555 2.4308 40.2201 2.37536 39.8431L1.68281 39.945C1.76237 40.486 2.03444 40.9881 2.47571 41.3313L2.90546 40.7788ZM2.37669 39.8532C2.33301 39.4819 2.43147 39.1156 2.65636 38.8264L2.10381 38.3967C1.7617 38.8365 1.61716 39.3882 1.68148 39.9349L2.37669 39.8532ZM2.65599 38.8269L6.04521 34.4847L5.49341 34.054L2.10418 38.3962L2.65599 38.8269ZM6.0168 34.0219L5.29723 33.3023L4.80226 33.7973L5.52182 34.5169L6.0168 34.0219Z'\n        fill='#344052'\n      />\n      <path\n        d='M12.475 18.7127C17.4672 18.7127 21.5453 22.8032 21.5453 27.8252C21.5453 32.8472 17.4813 36.9377 12.475 36.9377C7.46878 36.9377 3.40472 32.8472 3.40472 27.8252C3.40472 22.8032 7.46878 18.7127 12.475 18.7127ZM12.475 17.7002C6.89222 17.7002 2.35004 22.2362 2.35004 27.8252C2.35004 33.4142 6.87815 37.9502 12.475 37.9502C18.0719 37.9502 22.6 33.4142 22.6 27.8252C22.6 22.2362 18.0719 17.7002 12.475 17.7002Z'\n        fill='#344052'\n      />\n      <path\n        d='M12.475 19.0627C17.2725 19.0627 21.1953 22.9951 21.1953 27.8252H21.8953C21.8953 22.6113 17.6619 18.3627 12.475 18.3627V19.0627ZM21.1953 27.8252C21.1953 32.6556 17.2862 36.5877 12.475 36.5877V37.2877C17.6763 37.2877 21.8953 33.0388 21.8953 27.8252H21.1953ZM12.475 36.5877C7.6638 36.5877 3.75472 32.6556 3.75472 27.8252H3.05472C3.05472 33.0388 7.27376 37.2877 12.475 37.2877V36.5877ZM3.75472 27.8252C3.75472 22.9948 7.6638 19.0627 12.475 19.0627V18.3627C7.27376 18.3627 3.05472 22.6116 3.05472 27.8252H3.75472ZM12.475 17.3502C6.69906 17.3502 2.00004 22.0428 2.00004 27.8252H2.70004C2.70004 22.4296 7.08538 18.0502 12.475 18.0502V17.3502ZM2.00004 27.8252C2.00004 33.6073 6.68468 38.3002 12.475 38.3002V37.6002C7.07163 37.6002 2.70004 33.2211 2.70004 27.8252H2.00004ZM12.475 38.3002C18.2654 38.3002 22.95 33.6073 22.95 27.8252H22.25C22.25 33.2211 17.8784 37.6002 12.475 37.6002V38.3002ZM22.95 27.8252C22.95 22.0431 18.2654 17.3502 12.475 17.3502V18.0502C17.8784 18.0502 22.25 22.4293 22.25 27.8252H22.95Z'\n        fill='#344052'\n      />\n    </svg>\n  );\n};\n\nexport const LookingGlass = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox='2.5 1 64 64'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M37.272 47.1357L45.0293 57.079C46.0135 58.3359 47.4838 58.9999 48.966 58.9999C50.045 58.9999 51.124 58.6561 52.037 57.9446L52.5706 57.5296C54.7405 55.834 55.1318 52.6918 53.4362 50.5219L46.5989 41.7578C46.3881 41.9673 46.173 42.1723 45.9535 42.3728L52.7366 51.0674C54.1239 52.8578 53.8156 55.4427 52.0252 56.83L51.4916 57.245C50.7683 57.8142 49.8908 58.1106 48.966 58.1106C47.6854 58.1106 46.5115 57.5296 45.7289 56.5336L38.188 46.8676C37.8855 46.9638 37.5801 47.0532 37.272 47.1357Z'\n        fill='#344052'\n      />\n      <path\n        d='M37.272 47.1357L37.1815 46.7976L36.6709 46.9342L36.996 47.3509L37.272 47.1357ZM45.0293 57.079L44.7534 57.2943L44.7538 57.2948L45.0293 57.079ZM52.037 57.9446L51.8222 57.6684L51.8219 57.6685L52.037 57.9446ZM52.5706 57.5296L52.7855 57.8059L52.7861 57.8054L52.5706 57.5296ZM53.4362 50.5219L53.1602 50.7372L53.1604 50.7374L53.4362 50.5219ZM46.5989 41.7578L46.8748 41.5425L46.632 41.2313L46.3521 41.5096L46.5989 41.7578ZM45.9535 42.3728L45.7175 42.1144L45.4784 42.3327L45.6776 42.5881L45.9535 42.3728ZM52.7366 51.0674L53.0133 50.853L53.0126 50.8521L52.7366 51.0674ZM52.0252 56.83L51.8108 56.5534L51.8103 56.5538L52.0252 56.83ZM51.4916 57.245L51.2767 56.9688L51.2752 56.97L51.4916 57.245ZM45.7289 56.5336L45.453 56.7489L45.4537 56.7498L45.7289 56.5336ZM38.188 46.8676L38.4639 46.6524L38.3141 46.4603L38.082 46.5341L38.188 46.8676ZM36.996 47.3509L44.7534 57.2943L45.3053 56.8638L37.5479 46.9204L36.996 47.3509ZM44.7538 57.2948C45.8066 58.6394 47.38 59.3499 48.966 59.3499V58.6499C47.5876 58.6499 46.2204 58.0325 45.3049 56.8633L44.7538 57.2948ZM48.966 59.3499C50.12 59.3499 51.2754 58.9818 52.2522 58.2207L51.8219 57.6685C50.9726 58.3303 49.9699 58.6499 48.966 58.6499V59.3499ZM52.2519 58.2209L52.7855 57.8059L52.3557 57.2534L51.8222 57.6684L52.2519 58.2209ZM52.7861 57.8054C55.1077 55.9912 55.5271 52.6292 53.712 50.3064L53.1604 50.7374C54.7365 52.7544 54.3733 55.6768 52.3551 57.2538L52.7861 57.8054ZM53.7122 50.3066L46.8748 41.5425L46.3229 41.9731L53.1602 50.7372L53.7122 50.3066ZM46.3521 41.5096C46.1449 41.7156 45.9333 41.9172 45.7175 42.1144L46.1896 42.6312C46.4127 42.4274 46.6314 42.219 46.8456 42.006L46.3521 41.5096ZM45.6776 42.5881L52.4607 51.2826L53.0126 50.8521L46.2295 42.1575L45.6776 42.5881ZM52.4599 51.2817C53.7307 52.9218 53.4461 55.2863 51.8108 56.5534L52.2395 57.1067C54.1852 55.5991 54.5171 52.7938 53.0133 50.853L52.4599 51.2817ZM51.8103 56.5538L51.2767 56.9688L51.7065 57.5213L52.2401 57.1063L51.8103 56.5538ZM51.2752 56.97C50.6152 57.4893 49.8145 57.7606 48.966 57.7606V58.4606C49.9672 58.4606 50.9214 58.1391 51.708 57.5201L51.2752 56.97ZM48.966 57.7606C47.7941 57.7606 46.7212 57.23 46.0041 56.3174L45.4537 56.7498C46.3018 57.8293 47.5766 58.4606 48.966 58.4606V57.7606ZM46.0049 56.3183L38.4639 46.6524L37.912 47.0829L45.453 56.7489L46.0049 56.3183ZM38.082 46.5341C37.7847 46.6286 37.4844 46.7165 37.1815 46.7976L37.3625 47.4737C37.6759 47.3899 37.9864 47.2989 38.294 47.2012L38.082 46.5341Z'\n        fill='#344052'\n      />\n      <path\n        d='M31.3433 47.2478C19.8179 47.2478 10.4506 37.8686 10.4506 26.3551C10.4506 14.8416 19.8298 5.4624 31.3433 5.4624C42.8568 5.4624 52.236 14.8416 52.236 26.3551C52.236 37.8686 42.8568 47.2478 31.3433 47.2478Z'\n        stroke='#344052'\n        strokeWidth='0.7'\n      />\n      <path\n        d='M31.5 5.89583C42.8592 5.89583 52.1042 15.1408 52.1042 26.5C52.1042 37.8592 42.8592 47.1042 31.5 47.1042C20.1408 47.1042 10.8958 37.8592 10.8958 26.5C10.8958 15.1408 20.1408 5.89583 31.5 5.89583ZM31.5 5C19.6272 5 10 14.6272 10 26.5C10 38.3728 19.6272 48 31.5 48C43.3728 48 53 38.3728 53 26.5C53 14.6272 43.3728 5 31.5 5Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.7'\n      />\n      <path\n        d='M31.5 9.82031C40.6984 9.82031 48.1797 17.3016 48.1797 26.5C48.1797 35.6984 40.6984 43.1797 31.5 43.1797C22.3016 43.1797 14.8203 35.6984 14.8203 26.5C14.8203 17.3016 22.3016 9.82031 31.5 9.82031ZM31.5 9C21.8312 9 14 16.8312 14 26.5C14 36.1688 21.8312 44 31.5 44C41.1688 44 49 36.1688 49 26.5C49 16.8312 41.1688 9 31.5 9Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.7'\n      />\n    </svg>\n  );\n};\n\nexport const Services = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n    >\n      <path\n        d='M37.3981 40.1694V33.7032C37.3903 33.1792 37.1765 32.6788 36.8021 32.3082C36.4277 31.9376 35.9222 31.726 35.3928 31.7183H34.7244C34.195 31.726 33.6895 31.9376 33.3151 32.3082C32.9407 32.6788 32.727 33.1792 32.7191 33.7032V39.7183'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M36.3973 40.5601C36.3973 41.1123 36.8451 41.5601 37.3973 41.5601C37.9496 41.5601 38.3973 41.1123 38.3973 40.5601H36.3973ZM37.3973 35.5676L36.3975 35.5529L36.3973 35.5602V35.5676H37.3973ZM39.364 33.5826V32.5826H39.3565L39.3491 32.5827L39.364 33.5826ZM40.0196 33.5826L40.0345 32.5827L40.027 32.5826H40.0196V33.5826ZM41.9862 35.5676H42.9862V35.5602L42.9861 35.5529L41.9862 35.5676ZM41.9862 37.6728H40.9862L42.9861 37.6877L41.9862 37.6728ZM43.9231 35.718V34.718H43.9155L43.9079 34.7181L43.9231 35.718ZM46.5453 51.8984L47.5416 51.984L47.5453 51.9413V51.8984H46.5453ZM40.5857 56.4999V57.4999H40.5938L40.6019 57.4998L40.5857 56.4999ZM34.1196 56.4999L34.1196 57.4999H34.1196V56.4999ZM26.2828 51.0563L26.999 50.3584L26.9868 50.3459L26.9742 50.3339L26.2828 51.0563ZM19.3697 44.4398L20.0611 43.7173L20.0074 43.6659L19.9467 43.623L19.3697 44.4398ZM18.2672 40.2292L17.5462 39.5362L17.5333 39.5497L17.5208 39.5637L18.2672 40.2292ZM19.7869 39.4846L19.6827 38.49L19.7869 39.4846ZM21.4257 39.8984L21.9921 39.0742L21.9887 39.0719L21.4257 39.8984ZM28.0706 44.3796L27.5169 45.2123L29.0706 46.2456V44.3796H28.0706ZM28.0706 25.4623L27.0706 25.4483V25.4623H28.0706ZM30.1267 23.5074L30.0807 24.5064L30.1037 24.5074H30.1267V23.5074ZM30.7822 23.5074V24.5074H30.7824L30.7822 23.5074ZM32.7489 25.4623H33.7489V25.4548L33.7488 25.4473L32.7489 25.4623ZM38.3973 40.5601V35.5676H36.3973V40.5601H38.3973ZM38.3972 35.5823C38.4012 35.3154 38.508 35.0624 38.6923 34.8764L37.2715 33.4688C36.7214 34.0239 36.4089 34.7717 36.3975 35.5529L38.3972 35.5823ZM38.6923 34.8764C38.8762 34.6907 39.1227 34.5863 39.379 34.5825L39.3491 32.5827C38.5669 32.5944 37.8219 32.9133 37.2715 33.4688L38.6923 34.8764ZM39.364 34.5826H40.0196V32.5826H39.364V34.5826ZM40.0046 34.5825C40.2608 34.5863 40.5073 34.6907 40.6913 34.8764L42.1121 33.4688C41.5617 32.9133 40.8167 32.5944 40.0345 32.5827L40.0046 34.5825ZM40.6913 34.8764C40.8756 35.0624 40.9824 35.3154 40.9863 35.5823L42.9861 35.5529C42.9746 34.7717 42.6621 34.024 42.1121 33.4688L40.6913 34.8764ZM40.9862 35.5676V37.6728H42.9862V35.5676H40.9862ZM42.9861 37.6877C42.99 37.4288 43.0936 37.1833 43.2724 37.0029L41.8516 35.5953C41.3072 36.1448 40.9978 36.8848 40.9863 37.6579L42.9861 37.6877ZM43.2724 37.0029C43.4508 36.8228 43.6899 36.7216 43.9382 36.7178L43.9079 34.7181C43.1337 34.7298 42.3963 35.0455 41.8516 35.5953L43.2724 37.0029ZM43.9231 36.718H44.6084V34.718H43.9231V36.718ZM44.6084 36.718C44.8539 36.718 45.0912 36.8163 45.2676 36.9944L46.6884 35.5867C46.1383 35.0315 45.3903 34.718 44.6084 34.718V36.718ZM45.2676 36.9944C45.4443 37.1727 45.5453 37.4166 45.5453 37.6728H47.5453C47.5453 36.8921 47.2381 36.1416 46.6884 35.5867L45.2676 36.9944ZM45.5453 37.6728V48.1089H47.5453V37.6728H45.5453ZM45.5453 48.1089V51.8984H47.5453V48.1089H45.5453ZM46.5453 51.8984C45.5489 51.8129 45.549 51.8123 45.549 51.8117C45.5491 51.8115 45.5491 51.811 45.5491 51.8107C45.5492 51.81 45.5492 51.8094 45.5493 51.8089C45.5494 51.8078 45.5495 51.807 45.5495 51.8065C45.5496 51.8054 45.5496 51.8053 45.5495 51.8062C45.5493 51.808 45.5487 51.8137 45.5475 51.8231C45.5451 51.842 45.5405 51.8753 45.5325 51.9211C45.5166 52.013 45.4876 52.1532 45.4375 52.3255C45.3365 52.6726 45.1547 53.134 44.8345 53.5938C44.2256 54.468 43.0356 55.4601 40.5695 55.5L40.6019 57.4998C43.708 57.4495 45.4978 56.1409 46.4757 54.7368C46.9488 54.0575 47.2121 53.3855 47.3579 52.8839C47.4312 52.6319 47.476 52.4189 47.503 52.2637C47.5165 52.186 47.5256 52.1223 47.5316 52.075C47.5346 52.0514 47.5368 52.0318 47.5384 52.0165C47.5393 52.0089 47.5399 52.0023 47.5404 51.9969C47.5407 51.9942 47.5409 51.9917 47.5411 51.9896C47.5412 51.9885 47.5413 51.9875 47.5414 51.9866C47.5414 51.9861 47.5415 51.9854 47.5415 51.9852C47.5416 51.9846 47.5416 51.984 46.5453 51.8984ZM40.5857 55.4999H34.1196V57.4999H40.5857V55.4999ZM34.1196 56.4999C34.1196 55.4999 34.1206 55.4999 34.1217 55.4999C34.122 55.4999 34.123 55.4999 34.1237 55.4999C34.125 55.4999 34.1263 55.4999 34.1275 55.4999C34.13 55.5 34.1323 55.5 34.1345 55.5C34.1389 55.5001 34.1426 55.5002 34.1457 55.5003C34.1519 55.5005 34.1555 55.5007 34.1567 55.5008C34.1589 55.501 34.151 55.5005 34.1328 55.4981C34.0963 55.4932 34.0182 55.4804 33.8976 55.4483C33.6565 55.3843 33.2437 55.2431 32.655 54.934C31.4749 54.3146 29.5982 53.0261 26.999 50.3584L25.5665 51.7542C28.2713 54.5301 30.313 55.9634 31.7254 56.7049C32.4328 57.0763 32.9848 57.2753 33.3843 57.3814C33.5841 57.4344 33.7452 57.4641 33.868 57.4805C33.9294 57.4887 33.9811 57.4935 34.023 57.4963C34.044 57.4978 34.0625 57.4986 34.0786 57.4992C34.0867 57.4995 34.0941 57.4996 34.101 57.4997C34.1044 57.4998 34.1076 57.4998 34.1107 57.4999C34.1123 57.4999 34.1138 57.4999 34.1153 57.4999C34.116 57.4999 34.1171 57.4999 34.1175 57.4999C34.1185 57.4999 34.1196 57.4999 34.1196 56.4999ZM26.9742 50.3339L20.0611 43.7173L18.6782 45.1622L25.5913 51.7787L26.9742 50.3339ZM19.3697 44.4398C19.9467 43.623 19.947 43.6232 19.9473 43.6234C19.9474 43.6235 19.9476 43.6237 19.9478 43.6238C19.9481 43.624 19.9484 43.6242 19.9486 43.6244C19.9491 43.6247 19.9494 43.6249 19.9495 43.625C19.9498 43.6252 19.9494 43.6249 19.9483 43.6242C19.9462 43.6226 19.9415 43.6192 19.9345 43.614C19.9204 43.6035 19.8971 43.5858 19.8665 43.5615C19.8049 43.5127 19.715 43.4383 19.6109 43.3423C19.3979 43.1462 19.1483 42.8813 18.9543 42.5811C18.7579 42.2773 18.6547 41.9939 18.647 41.7442C18.6402 41.5262 18.7014 41.2448 19.0135 40.8948L17.5208 39.5637C16.8943 40.2663 16.624 41.0375 16.6479 41.8064C16.6709 42.5436 16.9607 43.1812 17.2746 43.6668C17.5909 44.1562 17.9689 44.5491 18.256 44.8135C18.4019 44.9478 18.5301 45.0543 18.6241 45.1289C18.6713 45.1662 18.7102 45.1959 18.7389 45.2172C18.7532 45.2279 18.765 45.2366 18.7741 45.2432C18.7786 45.2464 18.7824 45.2492 18.7855 45.2514C18.7871 45.2525 18.7884 45.2535 18.7896 45.2544C18.7902 45.2548 18.7908 45.2552 18.7913 45.2555C18.7915 45.2557 18.7919 45.2559 18.792 45.256C18.7923 45.2563 18.7926 45.2565 19.3697 44.4398ZM18.9881 40.9223C19.2296 40.671 19.5495 40.5149 19.8911 40.4792L19.6827 38.49C18.8693 38.5752 18.1132 38.9464 17.5462 39.5362L18.9881 40.9223ZM19.8911 40.4792C20.2325 40.4434 20.5764 40.5298 20.8627 40.7249L21.9887 39.0719C21.3126 38.6114 20.4962 38.4048 19.6827 38.49L19.8911 40.4792ZM20.8594 40.7226C22.2645 41.6881 23.9293 42.8109 25.2414 43.6912C25.8977 44.1316 26.4664 44.5118 26.8711 44.7818C27.0734 44.9169 27.2348 45.0244 27.3456 45.0983C27.401 45.1352 27.4438 45.1636 27.4727 45.1829C27.4872 45.1925 27.4982 45.1999 27.5056 45.2048C27.5093 45.2073 27.5121 45.2091 27.514 45.2104C27.5149 45.211 27.5156 45.2115 27.5161 45.2118C27.5164 45.212 27.5166 45.2121 27.5167 45.2122C27.5167 45.2122 27.5168 45.2122 27.5168 45.2122C27.5168 45.2123 27.5169 45.2123 28.0706 44.3796C28.6244 43.5469 28.6244 43.5469 28.6244 43.5469C28.6243 43.5469 28.6243 43.5469 28.6242 43.5468C28.6241 43.5468 28.624 43.5466 28.6237 43.5465C28.6233 43.5462 28.6226 43.5457 28.6217 43.5451C28.6198 43.5439 28.6171 43.5421 28.6134 43.5396C28.6061 43.5348 28.5952 43.5275 28.5809 43.518C28.5521 43.4988 28.5096 43.4705 28.4544 43.4338C28.344 43.3602 28.1832 43.253 27.9814 43.1183C27.5778 42.849 27.0105 42.4697 26.3557 42.0304C25.0456 41.1514 23.388 40.0335 21.9921 39.0742L20.8594 40.7226ZM29.0706 44.3796V25.4623H27.0706V44.3796H29.0706ZM29.0705 25.4763C29.0724 25.3431 29.1008 25.2118 29.1537 25.0904L27.3205 24.2908C27.1612 24.6562 27.0763 25.0498 27.0707 25.4483L29.0705 25.4763ZM29.1537 25.0904C29.2067 24.969 29.283 24.8602 29.3776 24.7702L27.9995 23.3208C27.7106 23.5955 27.4799 23.9255 27.3205 24.2908L29.1537 25.0904ZM29.3776 24.7702C29.4722 24.6802 29.5833 24.6109 29.7039 24.5657L29.0031 22.6925C28.6296 22.8323 28.2884 23.0461 27.9995 23.3208L29.3776 24.7702ZM29.7039 24.5657C29.8246 24.5206 29.9527 24.5005 30.0807 24.5064L30.1727 22.5085C29.7743 22.4902 29.3766 22.5528 29.0031 22.6925L29.7039 24.5657ZM30.1267 24.5074H30.7822V22.5074H30.1267V24.5074ZM30.7824 24.5074C31.0332 24.5074 31.2759 24.6069 31.4575 24.7874L32.8674 23.3689C32.313 22.8178 31.5642 22.5073 30.7821 22.5074L30.7824 24.5074ZM31.4575 24.7874C31.6393 24.9681 31.7451 25.2158 31.749 25.4773L33.7488 25.4473C33.7371 24.6664 33.4215 23.9197 32.8674 23.3689L31.4575 24.7874ZM31.7489 25.4623V39.1165H33.7489V25.4623H31.7489Z'\n        fill='#344052'\n      />\n      <path\n        d='M40.9863 41.1014C40.9863 41.6537 41.434 42.1014 41.9863 42.1014C42.5386 42.1014 42.9863 41.6537 42.9863 41.1014H40.9863ZM42.9863 41.1014V37.6729H40.9863V41.1014H42.9863Z'\n        fill='#344052'\n      />\n      <path\n        d='M37.3676 26.4549H50.5978C51.2617 26.4549 51.9189 26.3224 52.5319 26.0651C53.1448 25.8078 53.7013 25.4307 54.1693 24.9556C54.6373 24.4804 55.0076 23.9165 55.2589 23.2964C55.5102 22.6763 55.6376 22.0121 55.6337 21.3421V13.5827C55.6337 12.2347 55.1031 10.9419 54.1587 9.98869C53.2143 9.0355 51.9334 8.5 50.5978 8.5H14.0359C12.7003 8.5 11.4194 9.0355 10.475 9.98869C9.53065 10.9419 9.00009 12.2347 9.00009 13.5827V21.3421C8.99616 22.0121 9.12352 22.6763 9.37483 23.2964C9.62615 23.9165 9.99646 24.4804 10.4645 24.9556C10.9325 25.4307 11.489 25.8078 12.1019 26.0651C12.7148 26.3224 13.3721 26.4549 14.0359 26.4549H22.9753'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n    </svg>\n  );\n};\nexport const Recharge = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n    >\n      <path\n        d='M43.4516 6.82341C46.9851 6.82341 49.8702 9.69521 49.8702 13.2419V52.0311C49.8702 55.5646 46.9984 58.4496 43.4516 58.4496H20.7419C17.2084 58.4496 14.3234 55.5778 14.3234 52.0311V13.2419C14.3234 9.70844 17.1952 6.82341 20.7419 6.82341H43.4516ZM43.4516 5.5H20.7419C16.4673 5.5 13 8.96733 13 13.2419V52.0311C13 56.3057 16.4673 59.773 20.7419 59.773H43.4516C47.7262 59.773 51.1936 56.3057 51.1936 52.0311V13.2419C51.1936 8.96733 47.7262 5.5 43.4516 5.5Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.6'\n      />\n      <path\n        d='M18 32.5H46'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M18 39.5H46'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M18 45.5H46'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M18 52.5H46'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n    </svg>\n  );\n};\nexport const Bundles = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n    >\n      <path\n        d='M23.4031 9.67045C26.5282 9.67045 29.0797 12.2103 29.0797 15.3471V33.2666C29.0797 36.3917 26.5399 38.9433 23.4031 38.9433H14.8471C11.722 38.9433 9.17045 36.4034 9.17045 33.2666V15.3471C9.17045 12.222 11.7103 9.67045 14.8471 9.67045H23.4031ZM23.4031 8.5H14.8471C11.0666 8.5 8 11.5666 8 15.3471V33.2666C8 37.0472 11.0666 40.1138 14.8471 40.1138H23.4031C27.1836 40.1138 30.2502 37.0472 30.2502 33.2666V15.3471C30.2502 11.5666 27.1836 8.5 23.4031 8.5Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.8'\n      />\n      <path\n        d='M48.2283 26.0567C51.3534 26.0567 53.9049 28.5965 53.9049 31.7333V49.6529C53.9049 52.778 51.3651 55.3295 48.2283 55.3295H39.6723C36.5472 55.3295 33.9956 52.7897 33.9956 49.6529V31.7333C33.9956 28.6082 36.5355 26.0567 39.6723 26.0567H48.2283ZM48.2283 24.8862H39.6723C35.8918 24.8862 32.8252 27.9528 32.8252 31.7333V49.6529C32.8252 53.4334 35.8918 56.5 39.6723 56.5H48.2283C52.0088 56.5 55.0754 53.4334 55.0754 49.6529V31.7333C55.0754 27.9528 52.0088 24.8862 48.2283 24.8862Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.8'\n      />\n      <path\n        d='M24.7842 43.6133C27.1485 43.6133 29.0798 45.5446 29.0798 47.9089V50.6594C29.0798 53.0237 27.1485 54.9549 24.7842 54.9549H13.4777C11.1134 54.9549 9.18217 53.0237 9.18217 50.6594V47.9089C9.18217 45.5446 11.1134 43.6133 13.4777 43.6133H24.7842ZM24.7842 42.4429H13.4777C10.458 42.4429 8.01172 44.8891 8.01172 47.9089V50.6594C8.01172 53.6792 10.458 56.1254 13.4777 56.1254H24.7842C27.804 56.1254 30.2502 53.6792 30.2502 50.6594V47.9089C30.2502 44.8891 27.804 42.4429 24.7842 42.4429Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.8'\n      />\n      <path\n        d='M49.5977 10.2676C51.962 10.2676 53.8932 12.1989 53.8932 14.5632V17.3137C53.8932 19.678 51.962 21.6092 49.5977 21.6092H38.2912C35.9269 21.6092 33.9956 19.678 33.9956 17.3137V14.5632C33.9956 12.1989 35.9269 10.2676 38.2912 10.2676H49.5977ZM49.5977 9.09717H38.2912C35.2714 9.09717 32.8252 11.5434 32.8252 14.5632V17.3137C32.8252 20.3335 35.2714 22.7797 38.2912 22.7797H49.5977C52.6174 22.7797 55.0637 20.3335 55.0637 17.3137V14.5632C55.0637 11.5434 52.6174 9.09717 49.5977 9.09717Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.8'\n      />\n    </svg>\n  );\n};\n\nexport const InstantPricing = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 21 37'\n      fill='none'\n    >\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M10 0.330566C10.3452 0.330566 10.625 0.610388 10.625 0.955566L10.625 4.70557C10.625 5.05074 10.3452 5.33057 10 5.33057C9.65482 5.33057 9.375 5.05074 9.375 4.70557L9.375 0.955566C9.375 0.610388 9.65482 0.330566 10 0.330566Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M10 31.5806C10.3452 31.5806 10.625 31.8604 10.625 32.2056L10.625 35.9556C10.625 36.3007 10.3452 36.5806 10 36.5806C9.65482 36.5806 9.375 36.3007 9.375 35.9556L9.375 32.2056C9.375 31.8604 9.65482 31.5806 10 31.5806Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M9.99766 5.33215C8.26074 5.33215 6.75527 5.63849 5.46674 6.2332C4.16751 6.83284 3.20544 7.61337 2.53689 8.66396C1.85389 9.73723 1.46302 11.0058 1.46302 12.3757C1.46302 13.8707 1.86264 15.1095 2.50294 15.9328L2.5126 15.9452L2.52162 15.9581C3.19968 16.9267 4.0623 17.5934 5.01091 17.9728C6.05607 18.3909 7.51757 18.9128 9.18519 19.33C10.5807 19.6523 11.6857 19.9812 12.4805 20.3218C13.2935 20.6702 14.0004 21.1395 14.5934 21.7324L14.6134 21.7525L14.6316 21.7743C15.2773 22.5491 15.522 23.4466 15.522 24.411C15.522 25.6589 15.0162 26.7881 14.0305 27.6506C13.0208 28.534 11.6763 28.8703 10.1042 28.8703C8.51854 28.8703 7.28689 28.5278 6.28436 27.6506C5.43933 26.9112 4.96256 25.9912 4.76641 24.9295H1.27481C1.37133 26.1083 1.74949 27.078 2.40855 27.9842L2.41187 27.9888L2.41511 27.9934C3.08533 28.9509 4.15588 29.8369 5.44156 30.4354C6.85552 30.9374 8.38127 31.244 10.4392 31.3481C12.1777 31.3462 13.765 31.0371 15.0267 30.3577C16.3299 29.656 17.31 28.7668 17.991 27.6967C18.6642 26.6388 18.9583 25.4807 18.9583 24.198C18.9583 22.5514 18.6456 21.3546 17.9446 20.566C17.1413 19.6622 16.2452 18.9674 15.2565 18.4731C14.2539 17.9718 12.9313 17.5615 11.1171 17.0278C9.72747 16.7065 8.62675 16.3785 7.83433 16.0389C7.02136 15.6905 6.31442 15.2212 5.72145 14.6283C5.04335 13.9502 4.79284 13.1356 4.79284 12.1627C4.79284 10.8333 5.28087 9.69192 6.18268 8.91895L6.19813 8.9057L6.21442 8.89348C7.18555 8.16514 8.27909 7.80992 9.67814 7.80992C11.2043 7.80992 12.3998 8.28369 13.3549 8.99999C14.1878 9.62466 14.6769 10.4308 14.8896 11.3247H18.4427C18.132 9.56684 17.2933 8.15179 16.0053 7.11842C14.4309 5.94056 12.4424 5.33215 9.99766 5.33215ZM4.94291 5.09825C6.42357 4.41487 8.11333 4.08215 9.99766 4.08215C12.6613 4.08215 14.9305 4.74982 16.7631 6.12429L16.7709 6.13015L16.7785 6.13625C18.5181 7.52785 19.5517 9.49827 19.7795 11.8904L19.8447 12.5747H13.8051L13.7433 12.0187C13.6541 11.2156 13.3065 10.5262 12.6049 9.99999C11.8558 9.4382 10.9212 9.05992 9.67814 9.05992C8.52978 9.05992 7.70992 9.33945 6.98112 9.88102C6.40067 10.3864 6.04284 11.1575 6.04284 12.1627C6.04284 12.8939 6.21835 13.3574 6.60533 13.7444C7.07744 14.2165 7.64858 14.5993 8.32672 14.8899C9.02196 15.1879 10.0453 15.4976 11.4163 15.814L11.4343 15.8181L11.4521 15.8234C13.25 16.3522 14.6913 16.793 15.8156 17.3551C16.9571 17.9258 17.9781 18.7221 18.8789 19.7355C19.882 20.864 20.2083 22.4364 20.2083 24.198C20.2083 25.6846 19.8634 27.0826 19.0455 28.3678C18.2354 29.641 17.0854 30.6689 15.6193 31.4583C14.1156 32.268 12.3004 32.5981 10.4237 32.5981H10.4081L10.3925 32.5973C8.21097 32.4882 6.55183 32.1592 4.99461 31.6031L4.96829 31.5937L4.94291 31.582C3.47255 30.9034 2.21094 29.8794 1.39433 28.7149C0.464378 27.4344 0 26.028 0 24.3045V23.6795H5.88209L5.93376 24.2479C6.02828 25.2876 6.39584 26.0872 7.10749 26.7099C7.80908 27.3238 8.70759 27.6203 10.1042 27.6203C11.5142 27.6203 12.5129 27.3175 13.2073 26.7099C13.9257 26.0813 14.272 25.2933 14.272 24.411C14.272 23.6818 14.0957 23.0945 13.6889 22.5959C13.2208 22.1331 12.6564 21.7572 11.9881 21.4708C11.2929 21.1728 10.2696 20.8631 8.89856 20.5467L8.89302 20.5454L8.88751 20.5441C7.14917 20.1095 5.63053 19.567 4.54667 19.1334C3.36945 18.6625 2.31833 17.8424 1.5065 16.6876C0.661995 15.5946 0.213016 14.0694 0.213016 12.3757C0.213016 10.7634 0.6742 9.26275 1.48231 7.99286C2.30486 6.70029 3.47295 5.77669 4.94291 5.09825Z'\n        fill='#344052'\n      />\n    </svg>\n  );\n};\nexport const Convenience = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 51 51'\n      fill='none'\n    >\n      <path\n        d='M25.6143 49.5C38.8691 49.5 49.6143 38.7548 49.6143 25.5C49.6143 12.2452 38.8691 1.5 25.6143 1.5C12.3594 1.5 1.61426 12.2452 1.61426 25.5C1.61426 38.7548 12.3594 49.5 25.6143 49.5Z'\n        stroke='#344052'\n        strokeWidth='1.7'\n        strokeMiterlimit='10'\n      />\n      <path\n        d='M21.9403 11.6392V28.7877'\n        stroke='#344052'\n        strokeWidth='1.7'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M38.4518 27.0781H20.1105'\n        stroke='#344052'\n        strokeWidth='1.7'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n    </svg>\n  );\n};\nexport const CustomisableOptions = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 65 65'\n      fill='none'\n    >\n      <rect x='8.61426' y='7.5' width='42' height='8' rx='4' stroke='#344052' strokeWidth='2' />\n      <path\n        d='M51.6143 34.5V26.5C51.6143 23.7386 49.3757 21.5 46.6143 21.5H12.6143C9.85283 21.5 7.61426 23.7386 7.61426 26.5V42.5C7.61426 45.2614 9.85283 47.5 12.6143 47.5H33.6143'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeLinecap='round'\n      />\n      <circle cx='48.1143' cy='48' r='9.5' stroke='#344052' strokeWidth='2' />\n      <path\n        d='M14.6143 28.5H42.6143'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M14.6143 34.5H42.6143'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n      />\n      <path\n        d='M43.6143 47.8529L46.3835 50.5L51.6143 45.5'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeLinecap='round'\n      />\n    </svg>\n  );\n};\n\nexport const Delivered = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={size}\n      height={size}\n      viewBox='0 0 65 65'\n      fill='none'\n    >\n      <path\n        d='M40.1152 0.525391C40.8095 -0.174857 41.9356 -0.174875 42.6299 0.525391C43.3239 1.22564 43.324 2.36132 42.6299 3.06152L23.0732 27.4756C22.7399 27.8118 22.2878 28.0009 21.8164 28.001C21.3449 28.001 20.892 27.8119 20.5586 27.4756L16.1143 23.6777L15.9863 23.5879L12.873 27.4756C12.5396 27.8118 12.0877 28.001 11.6162 28.001C11.1447 28.0009 10.6928 27.8118 10.3594 27.4756L1.46973 19.8789C0.775504 19.1787 0.77564 18.0431 1.46973 17.3428C2.16401 16.6425 3.29009 16.6425 3.98438 17.3428L11.6162 23.6719L29.915 0.525391C30.6093 -0.174884 31.7354 -0.174884 32.4297 0.525391C33.124 1.22567 33.124 2.36125 32.4297 3.06152L18.2725 20.7334L18.9541 21.2988L21.8164 23.6719L40.1152 0.525391Z'\n        fill='#344052'\n      />\n    </svg>\n  );\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  Contant,\n  ContantContainer,\n  Icon,\n  LinkBotton,\n  SubHeader,\n  SubTitle,\n  Card,\n  ContentBox,\n  Title,\n  Image,\n  Text,\n  ImageContainer,\n  MainContantContainer,\n  InnnerContentBox,\n  TopContantContainer,\n  StyledImageContainer,\n  TopImgContainer,\n  ModalCard,\n  IconContainer,\n} from './NetworkTool.style';\nimport { NewTab } from '@mtnkente/paragon-icons';\nimport { useNavigate } from 'react-router-dom';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../../ErrorUI/ErrorUI';\nimport { LookingGlass, Peering } from '../../../../../assets/icons/NetworkToolsIcons';\nimport { useAuth0 } from '@auth0/auth0-react';\n\nexport interface ModalProps {\n  openModal: () => void;\n  closeModal: () => void;\n}\n\nconst Modal = ({ closeModal }: ModalProps): JSX.Element => {\n  const { loginWithRedirect } = useAuth0();\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL + 'fa-main/asset-manifest.json',\n        { cache: 'no-cache' }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <ModalCard>\n      <FeatureAppLoader\n        featureAppId='fa-bayobab-modal'\n        src={src}\n        moduleType=''\n        config={{\n          result: true,\n          title: 'Latency Matrix',\n          login: loginWithRedirect,\n          close: closeModal,\n        }}\n        onError={(error: unknown): unknown => error}\n      >\n        {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n          return error ? (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n              $xs={0}\n            >\n              <ErrorUi productName={'Modal'} />\n            </Col>\n          ) : (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n              $xs={0}\n            >\n              {featureAppNode}\n            </Col>\n          );\n        }}\n      </FeatureAppLoader>\n    </ModalCard>\n  );\n};\n\nconst Cards = (): JSX.Element => {\n  const navigate = useNavigate();\n\n  function newNavigation(url: string): void {\n    navigate(url);\n  }\n\n  return (\n    <Card>\n      <ContentBox\n        tabIndex={0} // Makes it focusable with Tab\n        role='button' // Improves accessibility\n        onClick={() => {\n          newNavigation('/peering-information/policy');\n          window.scrollTo(0, 0);\n        }}\n      >\n        <InnnerContentBox>\n          <IconContainer>\n            <Icon>\n              <Peering />\n            </Icon>\n          </IconContainer>\n          <Contant>\n            <Title>Peering Information</Title>\n            <Text> Explore seamless integration and connection with our solutions</Text>\n          </Contant>\n          <LinkBotton>\n            <NewTab color='#344052' width={16} height={16} />\n          </LinkBotton>\n        </InnnerContentBox>\n      </ContentBox>\n\n      <ContentBox\n        style={{ borderBottom: 'none' }}\n        tabIndex={0} // Makes it focusable with Tab\n        role='button' // Improves accessibility\n        onClick={() => {\n          newNavigation('looking-glass');\n          window.scrollTo(0, 0);\n        }}\n        onKeyDown={(e) => {\n          if (e.key === 'Enter' || e.key === ' ') {\n            newNavigation('looking-glass');\n            window.scrollTo(0, 0);\n          }\n        }}\n        onFocus={(e) => (e.target.style.outline = '2px solid #007BFF')} // Adds focus indicator\n        onBlur={(e) => (e.target.style.outline = 'none')} // Removes focus indicator on blur\n      >\n        <InnnerContentBox>\n          <IconContainer>\n            <Icon>\n              <LookingGlass />\n            </Icon>\n          </IconContainer>\n          <Contant>\n            <Title>Looking Glass</Title>\n            <Text>Access information about backbone routing and network efficiency.</Text>\n          </Contant>\n          <LinkBotton>\n            <NewTab color='#344052' width={16} height={16} />\n          </LinkBotton>\n        </InnnerContentBox>\n      </ContentBox>\n    </Card>\n  );\n};\n\nconst NetworkTool: React.FC = () => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const openModal = (): void => setIsOpen(true);\n  const closeModal = (): void => setIsOpen(false);\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <MainContantContainer id='network-tools'>\n        {isOpen && <Modal closeModal={closeModal} openModal={openModal} />}\n        <ContantContainer>\n          <StyledImageContainer>\n            <TopImgContainer>\n              <SubTitle>Network Tools</SubTitle>\n              <SubHeader>\n                Easily manage your network interconnections with the following tools\n              </SubHeader>\n            </TopImgContainer>\n            <Image></Image>\n          </StyledImageContainer>\n\n          <ImageContainer>\n            <TopContantContainer>\n              <SubTitle>Network Tools</SubTitle>\n              <SubHeader>\n                Easily manage your network interconnections with the following tools\n              </SubHeader>\n            </TopContantContainer>\n            <Cards openModal={openModal} />\n          </ImageContainer>\n        </ContantContainer>\n      </MainContantContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default NetworkTool;\n","import { Close } from '@mtnkente/paragon-icons';\nimport React from 'react';\nimport styled, { css, DefaultTheme } from 'styled-components';\nimport { CloseButton } from '../components/unauthorization/IpPortal/LandingPageCards/Modal/ModalForm.style';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\n\ninterface ModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n}\n\nconst ModalOverlay = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1000;\n\n  @media (max-width: 600px) {\n    padding: 0;\n    max-width: none;\n    height: 100vh;\n    border-radius: 0;\n    overflow: auto;\n  }\n`;\n\nconst ModalContainer = styled.div`\n  background-color: white;\n  padding: 48px 64px;\n  border-radius: 8px;\n  max-width: 1031px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: center;\n  position: relative;\n\n  border-radius: 10px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n\n  @media (max-width: 600px) {\n    padding: 24px;\n    max-width: none;\n    height: 100vh;\n    border-radius: 0;\n    overflow: auto;\n  }\n`;\n\nconst ModalHeader = styled.h2`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['headline-large']};\n      text-align: left !important;\n      width: 100%;\n      margin: 16px;\n    `;\n  }}\n`;\n\nconst ModalContent = styled.div`\n  color: #333;\n  font-size: 1rem;\n  line-height: 1.5;\n  margin-bottom: 20px;\n`;\n\nconst Text = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n      text-align: left !important;\n    `;\n  }}\n`;\nconst List = styled.li`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n      text-align: left !important;\n    `;\n  }}\n`;\n\nconst Modal: React.FC<ModalProps> = ({ isOpen, onClose }) => {\n  if (!isOpen) return null;\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <ModalOverlay>\n        <ModalContainer>\n          <CloseButton onClick={onClose}>\n            <Close color='#344052' height={24} width={24} style={{ marginLeft: '16px' }} />\n          </CloseButton>\n          <ModalHeader>Cookie Policy</ModalHeader>\n          <ModalContent>\n            <Text>\n              A cookie is generally a tiny data file that resides on your computer, mobile phone, or\n              other device, and allows Bayobab Central to recognise you as a user when you return to\n              the Bayobab Central online store website using the same computer and web browser.\n            </Text>\n            <Text>There are different types of cookies. Here are two examples:</Text>\n            <ul>\n              <List>\n                A “persistent” cookie – this cookie is set once you’ve logged on to a website. The\n                next time you visit the website, the persistent cookie will allow the website to\n                recognize you as an existing user or registered user, so you will not need to log in\n                before using the services. However, if you wish to access or change any of your\n                payment information (like a credit card number) or your registered information, you\n                must log in securely again with your password, even if your computer contains a\n                persistent cookie.\n              </List>\n              <List>\n                A “session” cookie – this cookie is used to identify a particular visit to a\n                website. Session cookies expire after a short time or when you close your web\n                browser.\n              </List>\n            </ul>\n\n            <Text>\n              You can remove or block cookies using the settings in your browser, but in some cases\n              doing so may impact your ability to use the website.\n            </Text>\n          </ModalContent>\n        </ModalContainer>\n      </ModalOverlay>\n    </ThemeProvider>\n  );\n};\n\nexport default Modal;\n","import { ComboButtons, StandardButton } from '@mtnkente/paragon-buttons';\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport Modal from './Modal';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { Dialog } from '@mtnkente/paragon-overlays';\n\ninterface CookieContainerProps {\n  $isVisible: boolean;\n}\n\nconst CookieContainer = styled.div<CookieContainerProps>`\n  position: fixed;\n  bottom: 20px;\n  right: 5%;\n  width: 420px !important;\n  border-radius: 8px;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n  z-index: 20;\n  transition:\n    opacity 0.3s ease-in-out,\n    visibility 0.3s ease-in-out;\n  opacity: ${(props): string => (props.$isVisible ? '1' : '0')};\n  visibility: ${(props): string => (props.$isVisible ? 'visible' : 'hidden')};\n  pointer-events: ${(props): string => (props.$isVisible ? 'auto' : 'none')};\n\n  @media (max-width: 600px) {\n    width: 100% !important;\n    padding: 0 20px;\n    right: 0;\n    left: 0;\n  }\n`;\n\ninterface CookieMessageProps {\n  onAccept: () => void;\n}\n\nconst CookieMessage: React.FC<CookieMessageProps> = ({ onAccept }) => {\n  const [showMessage, setShowMessage] = useState(\n    () => localStorage.getItem('cookieAccepted') !== 'true'\n  );\n  const [isModalOpen, setModalOpen] = useState(false);\n  const [isStacked, setIsStacked] = useState(false);\n\n  const handleResize = (): void => {\n    if (window.innerWidth <= 600) {\n      setIsStacked(true);\n    } else {\n      setIsStacked(false);\n    }\n  };\n\n  const openModal = (): void => setModalOpen(true);\n  const closeModal = (): void => setModalOpen(false);\n\n  useEffect(() => {\n    const cookieAccepted = localStorage.getItem('cookieAccepted');\n    if (cookieAccepted) {\n      setShowMessage(false);\n    }\n    handleResize();\n\n    window.addEventListener('resize', handleResize);\n\n    return (): void => window.removeEventListener('resize', handleResize);\n  }, [showMessage]);\n\n  const handleAccept = (): void => {\n    localStorage.setItem('cookieAccepted', 'true');\n    setShowMessage(false);\n    onAccept();\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <Modal isOpen={isModalOpen} onClose={closeModal} />\n      <CookieContainer $isVisible={showMessage}>\n        <Dialog\n          title='Cookie Policy Notice'\n          description='By selecting \"Accept\", you agree to the use of cookies for essential functionality that enhances your online experience, as outlined in our Cookie Policy.'\n        >\n          <ComboButtons $isStacked={isStacked}>\n            <StandardButton label='View Policy' $variant='secondary' onClick={openModal} />\n            <StandardButton label='Accept' $variant='primary' onClick={handleAccept} />\n          </ComboButtons>\n        </Dialog>\n      </CookieContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default CookieMessage;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\n// export const TitleHeader = styled.div`\n//   ${({ theme: { colors, typography, floats } }): DefaultTheme => {\n//     return css`\n//       display: flex;\n//       max-width: ${floats['1-column-max-width']};\n//       align-items: flex-start;\n//       gap: 0.625rem;\n\n//       flex: 1 0 0;\n//       color: ${colors['text-embed-text-colour']};\n//       ${typography['headline-large']};\n//     `;\n//   }}\n// `;\n\nexport const SubTitleContainer = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n`;\n\nexport const SubTitle = styled.div`\n  flex: 1 0 0;\n  color: ${({ theme }): DefaultTheme => theme.colors['text-embed-text-colour']};\n  ${({ theme }): DefaultTheme => theme.typography['body-large-semibold']}\n`;\n\nexport const Texts = styled.div`\n  color: var(--text-embed-text-colour, #344052);\n\n  /* device-size-m-l/body/large-semibold */\n  font-family: var(--typescale-body-m-l-large-semibold-font, Poppins);\n  font-size: var(--typescale-body-m-l-large-semibold-size, 1.125rem);\n  font-style: normal;\n  font-weight: 600;\n  line-height: var(--typescale-body-m-l-large-semibold-line-height, 1.5625rem); /* 138.889% */\n  letter-spacing: var(--typescale-body-m-l-large-semibold-letter-spacing, 0rem);\n`;\n\nexport const ModalOverlay = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 999;\n`;\n\nexport const ModalContent = styled.div`\n  background-color: white;\n  padding: 161px 243px;\n  border-radius: 8px;\n  max-width: 1040px;\n  height: 600px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  text-align: center;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n`;\nexport const MatrixModalContent = styled.div`\n  background-color: white;\n  padding: 40px;\n  border-radius: 8px;\n  max-width: 508px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  text-align: center;\n`;\nexport const BSPModalContent = styled.div`\n  background-color: white;\n  max-width: 508px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  text-align: center;\n`;\nexport const CloseButton = styled.button`\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  background: none;\n  border: none;\n  font-size: 1.5rem;\n  cursor: pointer;\n`;\n\nexport const Title = styled.h2`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['headline-large']};\n      margin: 24px 0px;\n    `;\n  }}\n`;\n// export const MatrixTitle = styled.h2`\n//   ${({ theme: { colors, typography } }): DefaultTheme => {\n//     return css`\n//       color: ${colors['text-embed-text-colour']};\n//       ${typography['title-small-bold']};\n//       margin: 24px 0px;\n//     `;\n//   }}\n// `;\n\nexport const Message = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n      margin: 0px 0px 24px 0px;\n    `;\n  }}\n`;\n\nexport const TermsAndConditions = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-start;\n  gap: var(--margin-small, 12px);\n  align-self: stretch;\n`;\n\n// export const Body = styled.p`\n//   ${({ theme: { colors, typography } }): DefaultTheme => {\n//     return css`\n//       color: ${colors['text-embed-text-colour']};\n//       ${typography['body-small-regular']};\n//       margin: 0;\n//     `;\n//   }}\n// `;\n","import React, { useEffect, useState } from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CloseButton, Message, ModalContent, ModalOverlay, Title } from './AuthErrorModal.style';\nimport { Alert, Close } from '@mtnkente/paragon-icons';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { ModalProps } from '../../../types/auth-modal.types';\nimport { useNavigate } from 'react-router-dom';\n\nconst AuthErrorModal: React.FC<ModalProps> = ({ type }) => {\n  const [close, setClose] = useState(false);\n  const navigate = useNavigate();\n\n  useEffect(() => {\n    if (close) {\n      navigate('/');\n    }\n  }, [close, navigate]);\n\n  return (\n    <>\n      {!close && (\n        <ThemeProvider mode='light' platform='bayobab'>\n          <ModalOverlay>\n            <ModalContent>\n              <CloseButton\n                data-testid='close button'\n                onClick={() => {\n                  setClose(true);\n                }}\n              >\n                <Close\n                  data-testid='close'\n                  color='#344052'\n                  height={24}\n                  width={24}\n                  style={{ marginLeft: '16px' }}\n                />\n              </CloseButton>\n              <div>\n                <Alert color='#B20010' height={65} width={64} />\n              </div>\n              <Title>\n                {type === 'activation' ? 'Account Activation Needed' : 'Something went wrong'}\n              </Title>\n              <Message>\n                {type === 'activation'\n                  ? `Your account exists but we cannot log you in because it has not yet been activated. Contact your account manager for assistance.`\n                  : `An unexpected error occured. Please try again.`}\n              </Message>\n\n              <StandardButton\n                data-testid='button'\n                $variant='primary'\n                label='Okay'\n                onClick={() => {\n                  setClose(true);\n                }}\n              />\n            </ModalContent>\n          </ModalOverlay>\n        </ThemeProvider>\n      )}\n    </>\n  );\n};\n\nexport default AuthErrorModal;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = { mobile: '576px', tablet: '868px', desktop: '1030px', smallDesktop: '1200px' };\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-large-bold']};\n      margin-bottom: 0.75rem;\n    `;\n  }}\n`;\n\nexport const Text = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n    `;\n  }}\n`;\nexport const BSPText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-large-regular']};\n    `;\n  }}\n`;\nexport const BannerHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n    `;\n  }}\n`;\nexport const BannerText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n      margin-bottom: 3rem;\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-bottom: 0;\n      }\n    `;\n  }}\n`;\nexport const BSPBanner = styled.div`\n  ${({ theme: { colors } }): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: 40px 48px;\n      justify-content: center;\n      align-items: center;\n      align-self: center;\n      margin: 64px auto 56px auto;\n      border-radius: 24px;\n      background: ${colors['colour-surface-dim']};\n      max-width: 1210px;\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin: 24px auto;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin: 0 auto 24px auto;\n      }\n    `;\n  }}\n`;\nexport const BSPInnerBanner = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 24px;\n  flex: 1 0 0;\n`;\n\nexport const InnerButton = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: flex-start;\n  gap: 24px;\n  max-width: 1210px;\n  align-self: flex-start;\n  justify-content: flex-start;\n  margin: 0 auto 0 auto;\n\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    flex-direction: column;\n    gap: 0px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    flex-direction: column;\n    gap: 0px;\n  }\n`;\n\nexport const BSPSubTitle = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['badge-label-text-colour']};\n      ${typography['label-small-bold']};\n      display: inline-flex;\n      padding: 0.5rem; /* Converted from 8px to rem */\n      justify-content: center;\n      align-items: center;\n      border-radius: 0.25rem; /* Converted from 4px to rem */\n      background: #344052;\n      margin-bottom: 0.75rem; /* Converted from 12px to rem */\n    `;\n  }}\n`;\n\nexport const BSPContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: 2rem 0; /* Converted from 32px to rem */\n\n      border-bottom: 1px solid #e5e5e5;\n      justify-content: space-between;\n      gap: 1.5rem; /* Converted from 24px to rem */\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; /* Converted from 32px to rem */\n      }\n    `;\n  }}\n`;\n\nexport const BSPContentBoxBotton = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: 2rem 0; /* Converted from 32px to rem */\n      justify-content: space-between;\n      align-items: center;\n      gap: 1.5rem; /* Converted from 24px to rem */\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; /* Converted from 32px to rem */\n      }\n    `;\n  }}\n`;\n\nexport const CardBSP = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n      max-width: 44.25rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-top: 3rem; /* Converted from 48px to rem */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-top: 0;\n      }\n    `;\n  }}\n`;\n\nexport const BSPMainContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      padding: 0 10rem;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.smallDesktop}) {\n        padding: 0 5rem;\n      }\n\n      @media (max-width: ${breakpoints.desktop}) {\n        padding: 0 2rem; /* Converted from 32px to rem */\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0 1rem; /* Converted from 16px to rem */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0 1rem; /* Converted from 16px to rem */\n      }\n    `;\n  }}\n`;\n\nexport const TopContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: none;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: none;\n      }\n    `;\n  }}\n`;\nexport const TopImgContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n      display: none;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-right: 1.5rem;\n        margin-left: 1.5rem;\n        margin-bottom: 2rem;\n        display: block;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-right: 0;\n        margin-left: 0;\n        margin-bottom: 0;\n        display: block;\n      }\n    `;\n  }}\n`;\n\nexport const BSPContantBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n\n      box-sizing: border-box;\n      position: relative;\n      flex-direction: column;\n      border-bottom: 1px solid rgba(34, 45, 60, 0.16);\n      padding-bottom: 5rem; /* Converted from 80px to rem */\n      margin-bottom: 5rem; /* Converted from 80px to rem */\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        justify-content: center;\n        align-items: center;\n        margin-top: 0;\n        padding-bottom: 3rem;\n        margin-bottom: 3rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding-bottom: 3rem;\n        margin-bottom: 3rem;\n        margin-top: 0;\n      }\n    `;\n  }}\n`;\n\nexport const BSPContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column-reverse;\n        justify-content: flex-start;\n        align-items: flex-start;\n        margin-top: 3rem; /* Converted from 48px to rem */\n        margin-right: 2.5rem;\n        margin-left: 2.5rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-right: 0;\n        margin-left: 0;\n        margin-top: 2rem;\n        flex-direction: column-reverse;\n      }\n    `;\n  }}\n`;\n\nexport const BSPSubHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour'] || '#344052'};\n      ${typography['headline-large']};\n      margin-bottom: 1.5rem; /* Converted from 24px to rem */\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        ${typography['title-large-bold']};\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        ${typography['title-large-bold']};\n      }\n    `;\n  }}\n`;\n\nexport const BSPSubButton = styled.div`\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    flex-direction: column;\n    margin-top: 1rem;\n    width: 100%;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    width: 100%;\n    margin-top: 1rem;\n  }\n`;\n\nexport const Icon = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-large-regular']};\n    `;\n  }}\n`;\n\nexport const Contant = styled.div`\n  width: 100%;\n`;\n\nexport const BSPImageContainer = styled.div`\n  max-width: 31.25rem;\n  margin-left: 6.875rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  @media (max-width: ${breakpoints.desktop}) {\n    margin-left: 5rem;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-left: 0;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-left: 0;\n  }\n`;\n\ninterface ImageProps {\n  img: string;\n}\n\nexport const BSPImage = styled.div<ImageProps>`\n  ${(): DefaultTheme => {\n    return css`\n      width: 25rem;\n      height: 42rem;\n      flex-shrink: 0;\n      border-radius: 1.5rem;\n      background-image: url(${process.env.REACT_APP_ASSETS_URL +\n      '_Pre-login/Whatsapp-BSP-mockup.webp'});\n      background-size: cover;\n      background-position: center;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        width: 20rem; /* Adjusted width for tablet view */\n        height: 35rem; /* Adjusted height for tablet view */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        width: 18rem; /* Converted from 328px to rem */\n        height: 33rem; /* Converted from 502.206px to rem */\n        margin-top: 2rem;\n        background-image: url(${process.env.REACT_APP_ASSETS_URL +\n        '_Pre-login/Whatsapp-BSP-visual-mobile.webp'});\n      }\n    `;\n  }}\n`;\n","import React, { useState, lazy, Suspense } from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  Contant,\n  Icon,\n  Title,\n  Text,\n  CardBSP,\n  BSPImage,\n  BSPContantContainer,\n  BSPSubHeader,\n  BSPSubButton,\n  BSPSubTitle,\n  BSPText,\n  BSPMainContantContainer,\n  BSPImageContainer,\n  TopContantContainer,\n  TopImgContainer,\n  BSPContentBoxBotton,\n  BSPContentBox,\n  InnerButton,\n  BSPContantBox,\n  BSPInnerBanner,\n  BSPBanner,\n  BannerText,\n  BannerHeader,\n} from './WhatsappBSP.style';\nimport { Bundles, Recharge, Services } from '../../../../../assets/icons/NetworkToolsIcons';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport Loading from '../../../../../Loading/Loading';\nimport { IconContainer } from '../NetworkTool/NetworkTool.style';\nimport { useNavigate } from 'react-router-dom';\n\n// Lazy loading components\nconst ModalForms = lazy(() => import('../Modal/ModalForm'));\nconst ConfirmModal = lazy(() => import('../Modal/ConfirmModal'));\nconst LoaderApp = lazy(() => import('./loader/Loader'));\n\nexport interface ModalProps {\n  openModal: () => void;\n}\n\nconst Cards = (): JSX.Element => {\n  return (\n    <CardBSP>\n      <TopContantContainer>\n        <BSPSubTitle data-testid='bsp-subtitle'>WhatsApp Business Messaging</BSPSubTitle>\n        <BSPSubHeader>Connect with your customers where they’re already active</BSPSubHeader>\n        <BSPText>\n          Simplify campaign execution and boost engagement without added complexity. Create and\n          manage impactful marketing campaigns over WhatsApp - without requiring technical\n          expertise.\n        </BSPText>\n      </TopContantContainer>\n      <BSPContentBox>\n        <IconContainer>\n          <Icon>\n            <Services />\n          </Icon>\n        </IconContainer>\n        <Contant>\n          <Title>Effortless setup</Title>\n          <Text>\n            Get started quickly with a simple, embedded sign-up - no developers needed. You can\n            focus on your campaigns, not the tech.\n          </Text>\n        </Contant>\n      </BSPContentBox>\n      <BSPContentBox>\n        <IconContainer>\n          <Icon>\n            <Recharge />\n          </Icon>\n        </IconContainer>\n        <Contant>\n          <Title>Easy to use message templates</Title>\n          <Text>\n            Use pre-approved WhatsApp templates to ensure your messages meet guidelines and reach\n            your audience quickly.\n          </Text>\n        </Contant>\n      </BSPContentBox>\n\n      <BSPContentBoxBotton>\n        <IconContainer>\n          <Icon>\n            <Bundles />\n          </Icon>\n        </IconContainer>\n        <Contant>\n          <Title>Streamlined account management</Title>\n          <Text>\n            Manage your WhatsApp accounts and messaging workflows in one intuitive dashboard, so you\n            can keep everything running smoothly.\n          </Text>\n        </Contant>\n      </BSPContentBoxBotton>\n      {/* <BSPSubButton>\n        <StandardButton\n          style={{ width: '100%' }}\n          $variant='primary'\n          label='Connect with us'\n          onClick={openModal}\n        />\n      </BSPSubButton> */}\n    </CardBSP>\n  );\n};\n\nconst WhatsappBSP: React.FC = () => {\n  const navigate = useNavigate();\n  const [isOpen, setIsOpen] = useState(false);\n  const [isOpenConfirm, setIsOpenConfirm] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [results, setResults] = useState(false);\n  const [status, setStatus] = useState<number>(0);\n\n  const openModal = (): void => setIsOpen(true);\n  const closeModal = (): void => setIsOpen(false);\n  const openLoading = (): void => setLoading(true);\n  const closeLoading = (): void => setLoading(false);\n  const isResults = (): void => setResults(true);\n  const notResults = (): void => setResults(false);\n\n  const openModalConfirm = (): void => setIsOpenConfirm(true);\n  const closeModalConfirm = (): void => setIsOpenConfirm(false);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <BSPMainContantContainer id='whatsapp-bsp'>\n        <Suspense fallback={<Loading isLoading={true} />}>\n          {isOpen && (\n            <ModalForms\n              data-testid='modal forms'\n              closeModal={closeModal}\n              openModalConfirm={openModalConfirm}\n              openLoading={openLoading}\n              closeLoading={closeLoading}\n              notResults={notResults}\n              isResults={isResults}\n              setStatus={setStatus}\n            />\n          )}\n          {loading && <LoaderApp />}\n          {isOpenConfirm && (\n            <ConfirmModal closeModal={closeModalConfirm} results={results} status={status} />\n          )}\n        </Suspense>\n        <BSPContantBox>\n          <BSPContantContainer>\n            <Cards openModal={openModal} />\n            <BSPImageContainer>\n              <TopImgContainer>\n                <BSPSubTitle data-testid='bsp-subtitle'>WhatsApp Business Messaging</BSPSubTitle>\n                <BSPSubHeader>\n                  Connect with your customers where they’re already active\n                </BSPSubHeader>\n                <BSPText>\n                  Simplify campaign execution and boost engagement without added complexity. Create\n                  and manage impactful marketing campaigns over WhatsApp - without requiring\n                  technical expertise.\n                </BSPText>\n              </TopImgContainer>\n              <BSPImage />\n            </BSPImageContainer>\n          </BSPContantContainer>\n          <div>\n            <BSPBanner>\n              <BSPInnerBanner>\n                <BannerHeader>Integrate WhatsApp via our API</BannerHeader>\n                <BannerText data-testid='text'>\n                  Unlock the power of WhatsApp with our API—seamless integration, scalable\n                  messaging, and enterprise-ready tools for developers.\n                </BannerText>\n              </BSPInnerBanner>\n            </BSPBanner>\n            <InnerButton>\n              <BSPSubButton>\n                <StandardButton\n                  style={{ width: '100%' }}\n                  $variant='primary'\n                  label='Enquire About This Product'\n                  onClick={openModal}\n                />\n              </BSPSubButton>\n              <BSPSubButton>\n                <StandardButton\n                  style={{ width: '100%' }}\n                  $variant='secondary'\n                  label='View API Documentation'\n                  onClick={() => navigate('/wabsp-api-doc')}\n                />\n              </BSPSubButton>\n            </InnerButton>\n          </div>\n        </BSPContantBox>\n      </BSPMainContantContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default WhatsappBSP;\n","import styled, { DefaultTheme, css } from 'styled-components';\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '868px',\n  desktop: '1030px',\n  smallDesktop: '1200px',\n};\n\nexport const LandingContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 24px;\n      // margin-top: 80px;\n      // @media (max-width: ${breakpoints.desktop}) {\n      // }\n\n      // @media (max-width: ${breakpoints.tablet}) {\n      //   margin-top: 40px;\n      // }\n\n      // @media (max-width: ${breakpoints.mobile}) {\n      //   margin-top: 40px;\n      // }\n    `;\n  }}\n`;\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n    `;\n  }}\n`;\n\nexport const FooterContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-bottom: 10px;\n      }\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { FooterContainer, LandingContainer, MainContainer } from './Footer.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nconst Footer: React.FC = () => {\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_IP_PORTAL_FOOTER + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_IP_PORTAL_FOOTER}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <ThemeProvider mode='light' platform='core'>\n      <MainContainer>\n        <LandingContainer>\n          <FooterContainer>\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-footer'\n              src={src}\n              moduleType=''\n              config={{\n                modal: () => {},\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      padding: '0px',\n                    }}\n                    data-testid='feature-app-col'\n                    $xs={12}\n                  >\n                    <ErrorUi productName={'Footer'} data-testid='feature-app-node' />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      padding: '0px',\n                    }}\n                    $xs={12}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FooterContainer>\n        </LandingContainer>\n      </MainContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default Footer;\n","/* eslint-disable   @typescript-eslint/explicit-function-return-type */\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '868px',\n  desktop: '1030px',\n  smallDesktop: '1200px',\n  imageDesktop: '1300px',\n};\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-large-bold']};\n      leading-trim: both;\n      margin-bottom: 0.75rem; /* 12px */\n      text-edge: cap;\n    `;\n  }}\n`;\nexport const ModalCard = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem;\n      }\n    `;\n  }}\n`;\n\nexport const Text = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n    `;\n  }}\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-small-bold']};\n      display: inline-flex;\n      padding: 0.5rem; /* 8px */\n      justify-content: center;\n      align-items: center;\n      gap: 0.5rem; /* 8px */\n      color: #ffffff;\n      font-size: 1rem; /* 16px */\n      font-style: normal;\n      font-weight: 600;\n      border-radius: 0.25rem; /* 4px */\n      background: #344052;\n      text-align: center;\n      leading-trim: both;\n      text-edge: cap;\n    `;\n  }}\n`;\n\nexport const ContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      align-items: center;\n      padding: 2rem 0; /* 32px */\n      border-bottom: 1px solid #e5e5e5;\n      justify-content: space-between;\n\n      cursor: pointer;\n      gap: 0.75rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        width: 100%;\n        padding: 2rem 0; /* 0px */\n        flex-direction: column;\n        align-items: flex-end;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; /* 32px */\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    `;\n  }}\n`;\nexport const InnnerContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n\n      justify-content: space-between;\n      gap: 1.5rem; /* 24px */\n      width: 100%;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0; /* 0px */\n        margin-top: 24px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0; /* 0px */\n        margin-top: 0;\n      }\n    `;\n  }}\n`;\n\nexport const ContentBoxBotton = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: 2rem 0; /* 32px */\n      justify-content: space-between;\n      gap: 1.5rem; /* 24px */\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem 0; /* 32px */\n        padding: 0; /* 0px */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; /* 32px */\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    `;\n  }}\n`;\n\nexport const Card = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-left: 0;\n        margin-top: 0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-left: 0px;\n        margin-top: 0;\n      }\n    `;\n  }}\n`;\n\nexport const ContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n\n      justify-content: center;\n      align-items: center;\n      box-sizing: border-box;\n      position: relative;\n      padding-bottom: 5rem;\n      margin-bottom: 3rem;\n      border-bottom: 1px solid rgba(34, 45, 60, 0.16);\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 40px;\n        margin-right: 0px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        justify-content: flex-start;\n        align-items: flex-start;\n        padding-bottom: 5rem;\n        margin-bottom: 3rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        flex-direction: column;\n        margin-left: 0px;\n        padding-bottom: 0;\n        margin-bottom: 0;\n      }\n    `;\n  }}\n`;\n\nexport const MainContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      padding: 0 10rem;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.smallDesktop}) {\n        padding: 0 1.25rem; /* 5rem */\n      }\n      @media (max-width: ${breakpoints.desktop}) {\n        padding: 0 2rem; /* 32px */\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        padding: 0 1rem; /* 16px */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0 1rem; /* 16px */\n      }\n    `;\n  }}\n`;\n\nexport const SubHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      flex: 1 0 0;\n      color: ${colors['text-embed-text-colour'] || '#344052'};\n      ${typography['headline-large']};\n      margin: 1.5rem 0; /* 12px */\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        ${typography['title-large-bold']};\n        margin: 1.5rem 0 1rem 0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        ${typography['title-large-bold']};\n        margin: 1rem 0;\n      }\n    `;\n  }}\n`;\n\nexport const Icon = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-large-regular']};\n    `;\n  }}\n`;\n\nexport const Contant = styled.div`\n  width: 100%;\n`;\n\nexport const ImageContainer = styled.div`\n  max-width: 33.25rem;\n\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-right: 0; /* 0px */\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-right: 0; /* 0px */\n  }\n`;\nexport const StyledImageContainer = styled.div`\n  max-width: 600px;\n  margin-right: 2rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  @media (max-width: ${breakpoints.imageDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.smallDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.desktop}) {\n    max-width: 400px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-right: 0px;\n    margin-bottom: 0;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-bottom: 0;\n  }\n`;\n\ninterface ImageProps {\n  img: string;\n}\n\nexport const Image = styled.div<ImageProps>`\n  ${(): DefaultTheme => {\n    return css`\n      width: 26.1875rem;\n      height: 35.1875rem;\n      margin-top: 4.25rem;\n      flex-shrink: 0;\n      border-radius: 1.5rem; /* 24px */\n      background-image: url(${process.env.REACT_APP_ASSETS_URL +\n      '_Pre-login/IpxAnalytics/LandingPage.webp'});\n      background-size: cover;\n      background-position: center;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-top: 2rem;\n        margin-left: auto;\n        margin-right: auto;\n        width: 26.375rem;\n        height: 36.5rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        height: 25rem; /* 328px */\n        width: 19rem; /* 328px */\n        margin-left: auto;\n        margin-right: auto;\n        align-self: center;\n      }\n    `;\n  }}\n`;\n\nexport const LinkBotton = styled.div`\n  ${({ theme }: { theme: DefaultTheme }): DefaultTheme['typography']['label-small-regular'] =>\n    theme.typography['label-small-regular']};\n  display: flex;\n  padding: 1rem; /* 24px */\n  justify-content: center;\n  align-items: center;\n  gap: 0;\n  border-radius: 100px;\n  background: #53e0cc;\n  cursor: pointer;\n  width: 3.75rem; /* 60px */\n  height: 2.8rem; /* 40px */\n  &:hover {\n    background: #53e0c0;\n  }\n`;\n\nexport const TopImgContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n      display: none;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: block;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: block;\n      }\n    `;\n  }}\n`;\n\nexport const TopContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: none;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: none;\n      }\n    `;\n  }}\n`;\n\nexport const TextContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-left: 0;\n      }\n    `;\n  }}\n`;\n\nexport const ComboButtons = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 24px;\n\n  @media (max-width: ${breakpoints.desktop}) {\n    margin-left: 70px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    width: 100%;\n    margin-top: 45px;\n    margin-left: 0;\n    align-items: center;\n    flex-direction: row;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    flex-direction: column;\n    margin-top: 0;\n    margin-bottom: 3rem;\n  }\n`;\n\nconst buttonVariants = {\n  primary: css`\n    background-color: #54e0cc;\n    color: #44536a;\n  `,\n  secondary: css`\n    background-color: transparent;\n    color: #334051;\n  `,\n};\n\nexport const StyledButton = styled(StandardButton)<{ $variant: 'primary' | 'secondary' }>`\n  ${({ $variant }) => buttonVariants[$variant]}\n\n  @media (max-width: 767px) {\n    width: 100%;\n  }\n`;\n","import React from 'react';\nimport useResponsiveSize from './hooks/icon-size';\n\nexport interface IconProps {\n  fill?: string;\n}\n\nexport const Alerts = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M55.3087 48.25L34.9571 13C33.8024 11 30.9157 11 29.761 13L9.40938 48.25C8.25468 50.25 9.69806 52.75 12.0075 52.75H52.7107C55.0201 52.75 56.4634 50.25 55.3087 48.25ZM36.6892 12C34.7647 8.66667 29.9534 8.66667 28.0289 12L7.67733 47.25C5.75283 50.5833 8.15846 54.75 12.0075 54.75H52.7107C56.5597 54.75 58.9653 50.5833 57.0408 47.25L36.6892 12Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M30.002 27.587C29.9546 26.5821 30.7513 25.5 32 25.5C33.2487 25.5 34.0454 26.5821 33.998 27.587L33.666 37.8715C33.6603 38.2345 33.5335 38.6161 33.2605 38.9293C32.9751 39.2569 32.5295 39.5 32 39.5C31.4705 39.5 31.0249 39.2569 30.7395 38.9293C30.4665 38.6161 30.3397 38.2345 30.334 37.8715L30.002 27.587Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M30 45.5C30 44.3954 30.8954 43.5 32 43.5C33.1046 43.5 34 44.3954 34 45.5C34 46.6046 33.1046 47.5 32 47.5C30.8954 47.5 30 46.6046 30 45.5Z'\n        fill='#344052'\n      />\n    </svg>\n  );\n};\n\nexport const Monitoring = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M6 13.8516C6 10.896 8.39601 8.5 11.3516 8.5H46.1373C49.0929 8.5 51.4889 10.896 51.4889 13.8516V29.9065C51.4889 30.3991 51.0896 30.7985 50.597 30.7985C50.1044 30.7985 49.705 30.3991 49.705 29.9065V13.8516C49.705 11.8812 48.1077 10.2839 46.1373 10.2839H11.3516C9.38122 10.2839 7.78388 11.8812 7.78388 13.8516V37.0421C7.78388 39.0125 9.38122 40.6098 11.3516 40.6098H34.5421C35.0347 40.6098 35.434 41.0091 35.434 41.5017C35.434 41.9944 35.0347 42.3937 34.5421 42.3937H11.3516C8.39601 42.3937 6 39.9977 6 37.0421V13.8516Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M54.0757 47.0315L57.1673 50.9924C57.9982 52.0641 57.8176 53.6054 56.7459 54.4362L56.1318 54.9178C55.6863 55.267 55.1444 55.4356 54.6267 55.4356C53.8921 55.4356 53.1697 55.1105 52.688 54.4844L49.3854 50.2532L50.1064 50.109L50.3019 49.9786L53.3864 53.9305C53.6874 54.3158 54.133 54.5325 54.6146 54.5325C54.9638 54.5325 55.2889 54.4242 55.5659 54.2074L56.18 53.7258C56.5051 53.4729 56.7098 53.0996 56.77 52.6902C56.8181 52.2808 56.7098 51.8714 56.4569 51.5463L53.4339 47.6734L54.0757 47.0315Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M54.1046 46.5612L53.018 47.6478L56.2105 51.738C56.41 51.9947 56.4981 52.3198 56.4605 52.6493C56.4102 52.9837 56.2438 53.2806 55.9883 53.4794L55.9873 53.4801L55.3735 53.9616C55.1531 54.134 54.8961 54.2204 54.6146 54.2204C54.2297 54.2204 53.8747 54.0483 53.6325 53.7384L50.3697 49.5582L49.9846 49.815L48.8279 50.0463L52.4406 54.6747L52.4413 54.6756C52.9849 55.3817 53.8004 55.7478 54.6267 55.7478C55.2103 55.7478 55.8209 55.5582 56.3244 55.1636L56.9372 54.6829C58.1471 53.7442 58.3483 52.0062 57.4141 50.8011L57.4134 50.8003L54.1046 46.5612ZM54.0469 47.5019L56.9206 51.1837C57.6475 52.1218 57.4872 53.4664 56.5546 54.1895L56.5532 54.1906L55.9392 54.6721C55.5517 54.9759 55.0786 55.1234 54.6267 55.1234C53.9842 55.1234 53.3551 54.8396 52.9355 54.294L52.9341 54.2923L49.9429 50.46L50.2282 50.403L50.234 50.3991L53.1403 54.1226C53.5002 54.5832 54.0363 54.8447 54.6146 54.8447C55.0315 54.8447 55.4248 54.7142 55.7583 54.4533L56.3716 53.9722C56.7649 53.6661 57.0079 53.218 57.0788 52.7356L57.0802 52.7267C57.1375 52.239 57.0085 51.747 56.7033 51.3547L53.8499 47.6989L54.0469 47.5019Z'\n        fill='#344052'\n      />\n      <path\n        d='M47.4528 33.7976C43.0001 33.7976 39.3627 37.4461 39.3627 41.9254C39.3627 46.4047 42.9876 50.0532 47.4528 50.0532C51.9181 50.0532 55.543 46.4047 55.543 41.9254C55.543 37.4461 51.9181 33.7976 47.4528 33.7976ZM47.4528 32.8945C52.4324 32.8945 56.4837 36.9404 56.4837 41.9254C56.4837 46.9105 52.4449 50.9563 47.4528 50.9563C42.4608 50.9563 38.422 46.9105 38.422 41.9254C38.422 36.9404 42.4608 32.8945 47.4528 32.8945Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M56.7959 41.9254C56.7959 36.7678 52.6047 32.5824 47.4528 32.5824C42.2882 32.5824 38.1098 36.7681 38.1098 41.9254C38.1098 47.0827 42.2882 51.2685 47.4528 51.2685C52.6175 51.2685 56.7959 47.0827 56.7959 41.9254ZM47.4528 33.2067C52.2601 33.2067 56.1715 37.1129 56.1715 41.9254C56.1715 46.7382 52.2723 50.6441 47.4528 50.6441C42.6334 50.6441 38.7342 46.7382 38.7342 41.9254C38.7342 37.1126 42.6334 33.2067 47.4528 33.2067ZM47.4528 34.1098C51.7442 34.1098 55.2308 37.617 55.2308 41.9254C55.2308 46.2339 51.7442 49.741 47.4528 49.741C43.1615 49.741 39.6749 46.2339 39.6749 41.9254C39.6749 37.6173 43.1738 34.1098 47.4528 34.1098ZM55.8552 41.9254C55.8552 37.2752 52.0921 33.4854 47.4528 33.4854C42.8265 33.4854 39.0505 37.2749 39.0505 41.9254C39.0505 46.5756 42.8136 50.3654 47.4528 50.3654C52.0921 50.3654 55.8552 46.5756 55.8552 41.9254Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M33.6344 15.1897C34.0023 15.1832 34.3364 15.4032 34.4757 15.7438L38.2627 25.0009H44.7994C45.292 25.0009 45.6913 25.4002 45.6913 25.8928C45.6913 26.3854 45.292 26.7848 44.7994 26.7848H37.6639C37.3017 26.7848 36.9755 26.5657 36.8383 26.2305L33.6936 18.5435L28.2435 33.3367C28.1173 33.6794 27.7948 33.9105 27.4297 33.92C27.0646 33.9294 26.7306 33.7154 26.5867 33.3797L21.8837 22.406L19.2293 26.3876C19.0639 26.6357 18.7854 26.7848 18.4872 26.7848H10.0138C9.52115 26.7848 9.12182 26.3854 9.12182 25.8928C9.12182 25.4002 9.52115 25.0009 10.0138 25.0009H18.0098L21.3128 20.0464C21.4944 19.7741 21.8105 19.623 22.1365 19.653C22.4624 19.6829 22.7458 19.889 22.8748 20.1898L27.344 30.6181L32.8132 15.7731C32.9404 15.4279 33.2665 15.1962 33.6344 15.1897Z'\n        fill='#344052'\n      />\n    </svg>\n  );\n};\n\nexport const Troubleshooting = (): JSX.Element => {\n  const size = useResponsiveSize(56, 40);\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox='0 0 64 65'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        d='M37.6221 47.6358L45.3794 57.5792C46.3636 58.836 47.8339 59.5001 49.3161 59.5001C50.3951 59.5001 51.4741 59.1562 52.3871 58.4448L52.9207 58.0297C55.0906 56.3341 55.4819 53.1919 53.7863 51.022L46.949 42.2579C46.7382 42.4674 46.5231 42.6725 46.3036 42.8729L53.0867 51.5675C54.474 53.3579 54.1657 55.9428 52.3753 57.3302L51.8417 57.7452C51.1184 58.3143 50.2409 58.6108 49.3161 58.6108C48.0355 58.6108 46.8616 58.0297 46.079 57.0337L38.5381 47.3678C38.2356 47.4639 37.9302 47.5533 37.6221 47.6358Z'\n        fill='#344052'\n        stroke='#344052'\n      />\n      <path\n        d='M31.6935 47.7478C20.1681 47.7478 10.8008 38.3686 10.8008 26.8551C10.8008 15.3416 20.18 5.9624 31.6935 5.9624C43.207 5.9624 52.5862 15.3416 52.5862 26.8551C52.5862 38.3686 43.207 47.7478 31.6935 47.7478Z'\n        stroke='#344052'\n        strokeWidth='0.7'\n      />\n      <path\n        d='M31.8501 6.39583C43.2093 6.39583 52.4543 15.6408 52.4543 27C52.4543 38.3592 43.2093 47.6042 31.8501 47.6042C20.4909 47.6042 11.2459 38.3592 11.2459 27C11.2459 15.6408 20.4909 6.39583 31.8501 6.39583ZM31.8501 5.5C19.9773 5.5 10.3501 15.1272 10.3501 27C10.3501 38.8728 19.9773 48.5 31.8501 48.5C43.7229 48.5 53.3501 38.8728 53.3501 27C53.3501 15.1272 43.7229 5.5 31.8501 5.5Z'\n        fill='#344052'\n      />\n      <path\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M10 27C10 14.9339 19.7839 5.15002 31.85 5.15002C43.9161 5.15002 53.7 14.9339 53.7 27C53.7 39.0661 43.9161 48.85 31.85 48.85C19.7839 48.85 10 39.0661 10 27ZM31.85 5.85002C20.1705 5.85002 10.7 15.3205 10.7 27C10.7 38.6795 20.1705 48.15 31.85 48.15C43.5295 48.15 53 38.6795 53 27C53 15.3205 43.5295 5.85002 31.85 5.85002ZM31.85 6.74586C20.6841 6.74586 11.5958 15.8342 11.5958 27C11.5958 38.1659 20.6841 47.2542 31.85 47.2542C43.0159 47.2542 52.1042 38.1659 52.1042 27C52.1042 15.8342 43.0159 6.74586 31.85 6.74586ZM10.8958 27C10.8958 15.4476 20.2975 6.04586 31.85 6.04586C43.4025 6.04586 52.8042 15.4476 52.8042 27C52.8042 38.5525 43.4025 47.9542 31.85 47.9542C20.2975 47.9542 10.8958 38.5525 10.8958 27Z'\n        fill='#344052'\n        stroke='#344052'\n        strokeWidth='0.3'\n      />\n      <path\n        d='M38 21.5L26 33.5'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M26 21.5L38 33.5'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeMiterlimit='10'\n        strokeLinecap='round'\n      />\n      <path\n        d='M35 10.5C39.5104 11.5954 43.3913 14.3006 46 17.9727M47.9854 21.9639C48.3483 22.7697 48.6581 23.6045 48.9102 24.4639'\n        stroke='#344052'\n        strokeWidth='2'\n        strokeLinecap='round'\n      />\n    </svg>\n  );\n};\n","import { countries } from '../../../../../utils/countries';\n\nexport const ipxAnalyticsFormContent = {\n  title: 'Connect With Us',\n\n  formSections: [\n    {\n      title: 'Personal details*',\n      fields: [\n        { label: 'Full Name', name: 'fullName', type: 'text', isOptional: false },\n        { label: 'Cellphone Number', name: 'contactNumber', type: 'tel', isOptional: false },\n        { label: 'Email Address', name: 'emailAddress', type: 'email', isOptional: false },\n      ],\n    },\n    {\n      title: 'Company details*',\n      fields: [\n        { label: 'Company Name', name: 'companyName', type: 'text', isOptional: false },\n        {\n          label: 'Job Title',\n          name: 'jobTitle',\n          type: 'text',\n          isOptional: false,\n        },\n        {\n          label: 'Select Your Country/Region',\n          name: 'country',\n          type: 'dropdown',\n          options: countries,\n          isOptional: false,\n          dropdownSearch: true,\n        },\n      ],\n    },\n    {\n      title: 'Comments',\n      fields: [{ label: 'Anything else?', name: 'message', type: 'textarea', isOptional: true }],\n    },\n  ],\n  buttonLabel: 'Submit Enquiry',\n};\n","/* eslint-disable no-unused-vars*/\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport { Close } from '@mtnkente/paragon-icons';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../../ErrorUI/ErrorUI';\nimport { BspForm, Card, CloseButton, FormContainer, ModalOverlay } from './ModalForm.style';\nimport { ipxAnalyticsFormContent } from './ipx-form.config';\nimport { CORRELATION_ID } from '../../../../../utils';\nimport { Lead } from '../../../../../models';\nimport {\n  capitalizeAfterFullStop,\n  capitalizeFirstLetter,\n} from '../../../../../utils/capitalise-text';\nimport { ScrollBarNavigator } from '@mtnkente/paragon-navigation';\nimport { saveLead } from '../../../../../apis';\n\nexport interface ModalProps {\n  openModal: () => void;\n  closeModal: () => void;\n  openModalConfirm: () => void;\n  closeModalConfirm: () => void;\n  openLoading: () => void;\n  closeLoading: () => void;\n  isResults: () => void;\n  notResults: () => void;\n  setStatus: (status: number) => void;\n  modalType: 'getInTouch' | 'dataSheet' | null;\n}\nexport interface ModalFormProps {\n  openModalConfirm: () => void;\n  openLoading: () => void;\n  closeLoading: () => void;\n  isResults: () => void;\n  notResults: () => void;\n  hasRecaptcha?: boolean;\n  setStatus: (status: number) => void;\n  modalType: 'getInTouch' | 'dataSheet' | null;\n}\n\nconst Form = ({\n  openModalConfirm,\n  closeLoading,\n  openLoading,\n  notResults,\n  isResults,\n  setStatus,\n}: ModalFormProps): JSX.Element => {\n  const formContent = {\n    ...ipxAnalyticsFormContent,\n    handleSubmit: (formData: any): void => {\n      openLoading();\n      formData.interest = 'IPX Advanced Analytics';\n      formData.fullName = formData.fullName\n        ? capitalizeFirstLetter(formData.fullName)\n        : formData.fullName;\n      formData.companyName = formData.companyName\n        ? capitalizeFirstLetter(formData.companyName)\n        : formData.companyName;\n      formData.jobTitle = formData.jobTitle\n        ? capitalizeFirstLetter(formData.jobTitle)\n        : formData.jobTitle;\n      formData.comment = formData.comment\n        ? capitalizeAfterFullStop(formData.comment)\n        : formData.comment;\n\n      saveLead(CORRELATION_ID, new Lead({ ...formData }))\n        .then(() => {\n          isResults();\n          closeLoading();\n          openModalConfirm();\n        })\n        .catch((error) => {\n          notResults();\n          setStatus(error.response.status);\n          console.error(error);\n          closeLoading();\n          openModalConfirm();\n        });\n    },\n  };\n\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_IP_PORTAL_FORM + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_IP_PORTAL_FORM}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <Card>\n      <FeatureAppLoader\n        featureAppId='fa-bayobab-connect-form'\n        src={src}\n        moduleType=''\n        config={{ data: formContent, hasRecaptcha: true }}\n        onError={(error: unknown): unknown => error}\n      >\n        {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n          return error ? (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n              $xs={0}\n            >\n              <ErrorUi productName={'Form'} />\n            </Col>\n          ) : (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n              $xs={0}\n            >\n              {featureAppNode}\n            </Col>\n          );\n        }}\n      </FeatureAppLoader>\n    </Card>\n  );\n};\n\nconst ModalForms: React.FC<ModalProps> = ({\n  closeModal,\n  openModalConfirm,\n  closeLoading,\n  openLoading,\n  notResults,\n  isResults,\n  setStatus,\n  modalType,\n}) => {\n  const isModalOpen = openLoading || isResults || openModalConfirm;\n\n  // This is to prevent the page from scrolling in the bg when the modal is open:\n  useEffect(() => {\n    document.body.style.overflow = isModalOpen ? 'hidden' : 'auto';\n\n    return (): void => {\n      document.body.style.overflow = 'auto';\n    };\n  }, [isModalOpen]);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <ModalOverlay>\n        <BspForm>\n          <CloseButton onClick={closeModal}>\n            <Close color='#344052' height={24} width={24} />\n          </CloseButton>\n          <ScrollBarNavigator $isVertical={true}>\n            <FormContainer>\n              <Form\n                openModalConfirm={openModalConfirm}\n                openLoading={openLoading}\n                closeLoading={closeLoading}\n                notResults={notResults}\n                isResults={isResults}\n                setStatus={setStatus}\n                modalType={modalType}\n              />\n            </FormContainer>\n          </ScrollBarNavigator>\n        </BspForm>\n      </ModalOverlay>\n    </ThemeProvider>\n  );\n};\n\nexport default ModalForms;\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { Suspense, useEffect, useState } from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  Contant,\n  ContantContainer,\n  Icon,\n  SubHeader,\n  SubTitle,\n  Card,\n  ContentBox,\n  ContentBoxBotton,\n  Title,\n  Image,\n  Text,\n  ImageContainer,\n  MainContantContainer,\n  InnnerContentBox,\n  StyledImageContainer,\n  TopImgContainer,\n  TopContantContainer,\n  ComboButtons,\n  TextContainer,\n} from './IpxAnalytics.style';\nimport { Alerts, Monitoring, Troubleshooting } from '../../../../../assets/icons/IpxAnalyticsIcons';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport IpxModalForms from '../Modal/IpxModalForm';\nimport LoaderApp from '../WhatsppBSP/loader/Loader';\nimport ConfirmModal from '../Modal/ConfirmModal';\nimport styled, { css } from 'styled-components';\nimport { IconContainer } from '../NetworkTool/NetworkTool.style';\nimport Loading from '../../../../../Loading/Loading';\n\nexport interface ModalProps {\n  openModal: () => void;\n  closeModal: () => void;\n  openModalConfirm: () => void;\n  closeModalConfirm: () => void;\n}\n\nconst buttonVariants = {\n  primary: css`\n    background-color: #54e0cc;\n    color: #44536a;\n  `,\n  secondary: css`\n    background-color: white;\n    color: #334051;\n    border: 1px solid #6f747e;\n  `,\n};\n\nexport const StyledButton = styled(StandardButton)<{ $variant: 'primary' | 'secondary' }>`\n  ${({ $variant }) => buttonVariants[$variant]}\n\n  @media (max-width: 868px) {\n    width: 100%;\n  }\n`;\n\nconst Cards = (): JSX.Element => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [isOpenConfirm, setIsOpenConfirm] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [results, setResults] = useState(false);\n  const [status, setStatus] = useState<number>(0);\n  const [modalType, setModalType] = useState<'getInTouch' | 'dataSheet' | null>(null);\n\n  const openModal = (): void => {\n    setModalType('getInTouch');\n    setIsOpen(true);\n  };\n\n  const closeModal = (): void => setIsOpen(false);\n  const openLoading = (): void => setLoading(true);\n  const closeLoading = (): void => setLoading(false);\n  const isResults = (): void => setResults(true);\n  const notResults = (): void => setResults(false);\n\n  const openModalConfirm = (): void => {\n    setIsOpenConfirm(true);\n    setIsOpen(false);\n  };\n  const closeModalConfirm = (): void => {\n    setIsOpenConfirm(false);\n    setIsOpen(false);\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <Suspense fallback={<Loading isLoading={true} />}>\n        {isOpen && (\n          <IpxModalForms\n            closeModal={closeModal}\n            openModalConfirm={openModalConfirm}\n            openLoading={openLoading}\n            closeLoading={closeLoading}\n            notResults={notResults}\n            isResults={isResults}\n            setStatus={setStatus}\n            modalType={modalType}\n          />\n        )}\n        {loading && <LoaderApp />}\n        {isOpenConfirm && (\n          <ConfirmModal\n            type={'ipx'}\n            closeModal={closeModalConfirm}\n            results={results}\n            status={status}\n          />\n        )}\n      </Suspense>\n      <Card>\n        <ContentBox>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <Monitoring />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Seamless Monitoring</Title>\n              <Text>\n                Identify issues with real-time signaling and anomaly detection &ndash; before they\n                impact your subscribers performance.\n              </Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBox>\n        <ContentBox>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <Alerts />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Intelligent Alerts</Title>\n              <Text>\n                Receive tailored alerts for predefined thresholds and outliers. Leverage actionable\n                insights for swift decision - making.\n              </Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBox>\n\n        <ContentBoxBotton>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <Troubleshooting />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Easy Troubleshooting</Title>\n              <Text>\n                Leverage comprehensive performance, business, and subscriber analytics to keep your\n                network running smoothly.\n              </Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBoxBotton>\n      </Card>\n      <ComboButtons>\n        <StyledButton\n          $isFullWidth\n          $variant='primary'\n          label='Enquire About This Product'\n          onClick={() => openModal()}\n        />\n      </ComboButtons>\n    </ThemeProvider>\n  );\n};\n\nconst IpxAnalytics = (): any => {\n  const [mobile, setMobile] = useState(window.innerWidth <= 868);\n\n  useEffect(() => {\n    const handleResize = (): void => setMobile(window.innerWidth <= 868);\n\n    window.addEventListener('resize', handleResize);\n    return (): void => window.removeEventListener('resize', handleResize);\n  }, []);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <MainContantContainer id='ipx-analytics'>\n        <ContantContainer>\n          <StyledImageContainer>\n            <TopImgContainer>\n              <SubTitle>IPX Advanced Analytics</SubTitle>\n              <SubHeader>Improve roaming with insights</SubHeader>\n            </TopImgContainer>\n            {!mobile && <Image />}\n          </StyledImageContainer>\n\n          <ImageContainer>\n            <TopContantContainer>\n              <SubTitle>IPX Advanced Analytics</SubTitle>\n              <SubHeader>Improve roaming with insights</SubHeader>\n            </TopContantContainer>\n            <TextContainer>\n              <Text style={{ marginBottom: '16px' }}>\n                Optimise international roaming with advanced analytics and proactive solutions\n                tailored for seamless and secure global connectivity.\n              </Text>\n            </TextContainer>\n            {mobile && <Image />}\n            <Cards />\n          </ImageContainer>\n        </ContantContainer>\n      </MainContantContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default IpxAnalytics;\n","// src/analytics.ts\nimport ReactGA from 'react-ga4';\n\nexport const initGA = (): void => {\n  ReactGA.initialize(process.env.GA4_ID as string);\n};\n\nexport const trackPage = (path: string): void => {\n  ReactGA.send({ hitType: 'pageview', page: path });\n};\n\nexport const trackEvent = (action: string, params: Record<string, any> = {}): void => {\n  ReactGA.event({\n    category: 'User',\n    action,\n    ...params,\n  });\n};\n\nexport const setUser = (companyName: string): void => {\n  ReactGA.set({\n    user_properties: {\n      companyName: companyName,\n    },\n  });\n};\n","/* eslint-disable   @typescript-eslint/explicit-function-return-type */\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '868px',\n  desktop: '1030px',\n  smallDesktop: '1200px',\n  imageDesktop: '1300px',\n};\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-large-bold']};\n      leading-trim: both;\n      margin-bottom: 0.75rem; // 12px to rem\n      text-edge: cap;\n    `;\n  }}\n`;\n\nexport const Text = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n    `;\n  }}\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['label-small-bold']};\n      display: inline-flex;\n      padding: 0.5rem;\n      justify-content: center;\n      align-items: center;\n\n      color: #ffffff;\n\n      border-radius: 0.25rem; // 4px to rem\n      background: #344052;\n      text-align: center;\n      leading-trim: both;\n    `;\n  }}\n`;\n\nexport const ContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      align-items: center;\n      padding: 2rem 0; // 32px to rem\n      border-bottom: 1px solid #e5e5e5;\n      justify-content: space-between;\n      gap: 0.75rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem 0; // 32px to rem\n        flex-direction: column;\n        align-items: flex-end;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; // 32px to rem\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    `;\n  }}\n`;\n\nexport const QuickQuotesMainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      padding: 0 10rem;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.smallDesktop}) {\n        padding: 0 5rem;\n      }\n\n      @media (max-width: ${breakpoints.desktop}) {\n        padding: 0 2rem; /* Converted from 32px to rem */\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0 1rem; /* Converted from 16px to rem */\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0 1rem; /* Converted from 16px to rem */\n      }\n    `;\n  }}\n`;\n\nexport const QuickQuotesContentContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      box-sizing: border-box;\n      position: relative;\n      border-bottom: 1px solid rgba(34, 45, 60, 0.16);\n      padding-bottom: 3rem;\n      margin-bottom: 3rem;\n      gap: 1.5rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column-reverse;\n        justify-content: flex-start;\n        align-items: flex-start;\n        margin-top: 3rem; /* Converted from 48px to rem */\n        margin-right: 2.5rem;\n        margin-left: 2.5rem;\n        gap: 0;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-right: 0;\n        margin-left: 0;\n        padding-bottom: 0;\n        flex-direction: column-reverse;\n        gap: 0;\n      }\n    `;\n  }}\n`;\n\nexport const QuickQuotesImageContainer = styled.div`\n  max-width: 31.25rem;\n  margin-left: 1.5rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  @media (max-width: ${breakpoints.desktop}) {\n    margin-left: 0;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-left: 0;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-left: 0;\n  }\n`;\n\nexport const InnnerContentBox = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n\n      justify-content: space-between;\n      gap: 1.5rem; // 24px to rem\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0; // 0px to rem\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0; // 0px to rem\n      }\n    `;\n  }}\n`;\n\nexport const ContentBoxBotton = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: 2rem 0; // 32px to rem\n      justify-content: space-between;\n      gap: 1.5rem; // 24px to rem\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 2rem 0; // 32px to rem\n        flex-direction: column;\n        align-items: flex-end;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 2rem 0; // 32px to rem\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    `;\n  }}\n`;\n\nexport const NoteContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      align-items: center;\n      flex-direction: row;\n      padding-bottom: 2rem;\n      margin-top: 1.4rem;\n    `;\n  }}\n`;\n\nexport const Card = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      align-self: flex-end;\n      width: 31.875rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        width: 100%;\n        margin-top: 0rem;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n      }\n    `;\n  }}\n`;\n\nexport const ContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n\n      justify-content: center;\n      align-items: center;\n      box-sizing: border-box;\n      position: relative;\n      border-bottom: 1px solid rgba(34, 45, 60, 0.16);\n      padding-bottom: 3rem;\n      margin-bottom: 3rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        flex-direction: column;\n      }\n    `;\n  }}\n`;\n\nexport const MainContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      padding: 0 10rem;\n      box-sizing: border-box;\n      position: relative;\n      @media (max-width: ${breakpoints.smallDesktop}) {\n        padding: 0 5rem;\n      }\n      @media (max-width: ${breakpoints.desktop}) {\n        padding: 0 32px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        flex-direction: column;\n        padding: 0 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0 16px;\n      }\n    `;\n  }}\n`;\n\nexport const SubHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour'] || '#344052'};\n      ${typography['headline-large']};\n      margin-top: 1.5rem;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        ${typography['title-large-bold']};\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        ${typography['title-large-bold']};\n      }\n    `;\n  }}\n`;\n\nexport const BSPSubButton = styled.div`\n  margin-top: 48px;\n  width: 183px;\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    flex-direction: column;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    width: 100%;\n  }\n`;\n\nexport const Icon = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-large-regular']};\n\n      svg {\n        width: 3.375rem;\n        height: 3.375rem;\n      }\n    `;\n  }}\n`;\n\nexport const Contant = styled.div`\n  width: 100%;\n`;\n\nexport const ImageContainer = styled.div`\n  max-width: 708px;\n  margin-right: 0px;\n\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    margin-right: 0px;\n    margin-bottom: 16px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-right: 0px;\n  }\n`;\n\nexport const StyledImageContainer = styled.div`\n  max-width: 600px;\n  margin-right: 2rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  @media (max-width: ${breakpoints.imageDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.smallDesktop}) {\n    max-width: 500px;\n  }\n  @media (max-width: ${breakpoints.desktop}) {\n    max-width: 400px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    max-width: 100%;\n    margin-right: 0px;\n    margin-bottom: 16px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n  }\n`;\n\nexport const BSPImageContainer = styled.div`\n  max-width: 500px;\n  margin-left: 80px;\n  @media (max-width: ${breakpoints.desktop}) {\n    margin-left: 80px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    margin-left: 0px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-left: 0px;\n  }\n`;\n\nexport const TopImgContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n      display: none;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: block;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: block;\n      }\n    `;\n  }}\n`;\n\nexport const TopContantContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        display: none;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        display: none;\n      }\n    `;\n  }}\n`;\n\ninterface ImageProps {\n  img: string;\n}\n\nexport const Image = styled.div<ImageProps>`\n  ${() => css`\n    width: 559px;\n    height: 600px;\n    border-radius: 24px;\n    background-image: url(${process.env.REACT_APP_ASSETS_URL +\n    '_Pre-login/converge-illustration.webp'});\n    background-size: cover;\n    background-position: center;\n    @media (max-width: ${breakpoints.imageDesktop}) {\n      width: 500px;\n      height: 550px;\n    }\n    @media (max-width: ${breakpoints.smallDesktop}) {\n      width: 450px;\n      height: 480px;\n    }\n    @media (max-width: ${breakpoints.desktop}) {\n      width: 400px;\n      height: 450px;\n    }\n\n    @media (max-width: ${breakpoints.tablet}) {\n      width: 350px; /* Adjusted width for tablet view */\n      height: 400px; /* Adjusted height for tablet view */\n    }\n\n    @media (max-width: ${breakpoints.mobile}) {\n      height: 318px;\n      width: 290px;\n      align-self: center;\n    }\n  `}\n`;\n\nexport const TextContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      align-items: flex-end;\n      box-sizing: border-box;\n      position: relative;\n      margin-top: 1.5rem;\n\n      @media (max-width: ${breakpoints.desktop}) {\n        margin-left: 70px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin-left: 0;\n      }\n    `;\n  }}\n`;\n","import React from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  Contant,\n  Icon,\n  SubHeader,\n  SubTitle,\n  Card,\n  ContentBox,\n  ContentBoxBotton,\n  Title,\n  Image,\n  Text,\n  InnnerContentBox,\n  TopImgContainer,\n  TopContantContainer,\n  QuickQuotesMainContainer,\n  QuickQuotesContentContainer,\n  QuickQuotesImageContainer,\n  TextContainer,\n} from './Converge.style';\nimport { Convenience, CustomisableOptions } from '../../../../../assets/icons/NetworkToolsIcons';\nimport { IconContainer } from '../NetworkTool/NetworkTool.style';\nimport { PasswordVisible } from '@mtnkente/paragon-icons';\n\nconst Cards = (): JSX.Element => {\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <Card>\n        <TopContantContainer>\n          <SubTitle>Converge (Network-as-a-Service)</SubTitle>\n          <SubHeader>Fibre Services, Simplified</SubHeader>\n          <TextContainer>\n            <Text>\n              Converge is Bayobab&#39;s Network-as-a-Service self-service platform for acquiring,\n              managing, and monitoring enterprise fibre services. It is designed for speed, scale,\n              and simplicity across Africa.\n            </Text>\n          </TextContainer>\n        </TopContantContainer>\n        <ContentBox>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <Convenience />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Fast Acquisition</Title>\n              <Text>\n                Use Quick Quote for instant pricing information or submit your technical\n                requirements and proceed to a firm offer.\n              </Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBox>\n        <ContentBox>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <PasswordVisible />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Complete Visibility</Title>\n              <Text>\n                Track your services, bandwidth, and usage with live reporting and intuitive\n                dashboards.\n              </Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBox>\n\n        <ContentBoxBotton>\n          <InnnerContentBox>\n            <IconContainer>\n              <Icon>\n                <CustomisableOptions />\n              </Icon>\n            </IconContainer>\n            <Contant>\n              <Title>Flexible Management</Title>\n              <Text>Upgrade or modify services with full control—no email threads, no delays.</Text>\n            </Contant>\n          </InnnerContentBox>\n        </ContentBoxBotton>\n      </Card>\n    </ThemeProvider>\n  );\n};\n\nconst Converge: React.FC = () => {\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <QuickQuotesMainContainer id='quick-quotes'>\n        <QuickQuotesContentContainer>\n          <Cards />\n          <QuickQuotesImageContainer>\n            <TopImgContainer>\n              <SubTitle>Converge (Network-as-a-Service)</SubTitle>\n              <SubHeader>Fibre Services, Simplified</SubHeader>\n            </TopImgContainer>\n            <Image></Image>\n          </QuickQuotesImageContainer>\n        </QuickQuotesContentContainer>\n      </QuickQuotesMainContainer>\n    </ThemeProvider>\n\n    // <ThemeProvider mode='light' platform='bayobab'>\n    //   <MainContantContainer id='quick-quotes'>\n    //     <Cards />\n    //     <ContantContainer>\n    //       <StyledImageContainer>\n    //         <TopImgContainer>\n    // <SubTitle>Fibre Quick Quotes</SubTitle>\n    // <SubHeader>Quotes so quick, get your custom price in a click</SubHeader>\n    //         </TopImgContainer>\n    //         {/* <Image></Image> */}\n    //       </StyledImageContainer>\n\n    //       <ImageContainer>\n    //         <TopContantContainer>\n    //           <SubTitle>Fibre Quick Quotes</SubTitle>\n    //           <SubHeader>Quotes so quick, get your custom price in a click</SubHeader>\n    //         </TopContantContainer>\n    //       </ImageContainer>\n    //     </ContantContainer>\n    //   </MainContantContainer>\n    // </ThemeProvider>\n  );\n};\n\nexport default Converge;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { BannerContainer, LandingContainer, MainContainer } from './LandingPage.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport NetworkTool from '../LandingPageCards/NetworkTool/NetworkTool';\nimport CookieMessage from '../../../../cookie/CookieMessage';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport AuthErrorModal from '../../../authorization/authModal/AuthErrorModal';\nimport WhatsappBSP from '../LandingPageCards/WhatsppBSP/WhatsappBSP';\nimport Footer from '../Footer/Footer';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport IpxAnalytics from '../LandingPageCards/IpxAnalytics/IpxAnalytics';\nimport { trackEvent } from '../../../../../analytics';\nimport Converge from '../LandingPageCards/Converge/Converge';\n\nconst LandingPage = (): ReactElement => {\n  const { loginWithRedirect } = useAuth0();\n  const { errorModalOpen, accountActivationModalOpen } = useProfile();\n  const [loading, setLoading] = useState(true);\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + 'fa-main/asset-manifest.json',\n        { cache: 'no-cache' }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_DYNAMIC_BANNER_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  // useEffect(() => {}, [errorModalOpen, accountActivationModalOpen]);\n\n  const BannerData = {\n    state: 'Landing',\n    backgroundColor: 'blue',\n    label: 'Welcome to',\n    title: 'Bayobab Central',\n    bodyText:\n      'Experience the convenience of seamlessly managing all your network and communication services and applications in one place.',\n    image: process.env.REACT_APP_ASSETS_URL + '_Pre-login/landing-platform-graphic.webp',\n    buttonLabel: 'Login & Get Started',\n    login: async (): Promise<void> => {\n      trackEvent('Banner_SignIn_Button', { label: 'Banner_SignIn_Button' });\n      await loginWithRedirect();\n    },\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/Hero-Banner_bg.webp',\n    // login: newNavigation,\n  };\n  const handleAcceptCookies = (): void => {};\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <CookieMessage onAccept={handleAcceptCookies} />\n      {errorModalOpen && <AuthErrorModal type='error' />}\n      {accountActivationModalOpen && <AuthErrorModal type='activation' />}\n      <MainContainer>\n        <BannerContainer>\n          <FeatureAppLoader\n            featureAppId='fa-bayobab-logout-banner'\n            src={src}\n            moduleType=''\n            config={{\n              bannerData: BannerData,\n            }}\n            onError={(error: unknown): unknown => error}\n          >\n            {({\n              error,\n              featureAppNode,\n              loading: isFeatureAppLoading,\n            }: CustomFeatureAppRenderingParams): ReactElement => {\n              if (!isFeatureAppLoading && loading) {\n                setLoading(false);\n              }\n              return error ? (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Banner'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        </BannerContainer>\n        <LandingContainer>\n          {!loading && (\n            <>\n              <WhatsappBSP />\n              <IpxAnalytics />\n              <Converge />\n              {/* <QuickQuotes /> */}\n              {/* <SMSHub /> */}\n              <NetworkTool />\n              <Footer />\n            </>\n          )}\n        </LandingContainer>\n      </MainContainer>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default LandingPage;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\ninterface NavContainerProps {\n  $zIndex: number;\n}\n\nexport const NavContainer = styled.div<NavContainerProps>`\n  ${({ theme: { typography }, $zIndex }): DefaultTheme => {\n    return css`\n      ${typography['blur-background-level-3']};\n      -webkit-backdrop-filter: blur(8px);\n      backdrop-filter: blur(8px);\n      background: rgba(244, 244, 244, 0.8);\n      display: block;\n      width: 100%;\n      padding: 0px 12px;\n      position: fixed;\n      z-index: ${$zIndex};\n      transition: top 0.2s ease-in-out;\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { NavContainer } from './Header.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { useNavigate } from 'react-router-dom';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { LOOKING_GLASS } from '../../../../utils/constants';\nimport { trackEvent } from '../../../../../analytics';\n\nconst Header: React.FC = () => {\n  const { loginWithRedirect } = useAuth0();\n  const navigate = useNavigate();\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(process.env.REACT_APP_FA_HEADER_URL + 'fa-main/asset-manifest.json', {\n        cache: 'no-cache',\n      });\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_HEADER_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  function BackNavigation(): void {\n    if (window.location.pathname === '/') {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    } else {\n      navigate('/');\n    }\n  }\n\n  const getZIndex = (path: string): number => {\n    switch (path) {\n      case LOOKING_GLASS:\n        return 21000;\n      default:\n        return 9;\n    }\n  };\n\n  const defaultConfig = {\n    username: '',\n    img: '',\n    themeMode: 'light',\n    myProfileText: '',\n    logoutText: '',\n    viewType: '',\n    upcomingServicesText: '',\n    supportTicketText: '',\n    feedbackText: '',\n    title: 'Landing Page',\n    ThemeProvider: 'theme',\n    login: async (): Promise<void> => {\n      trackEvent('Header_SignIn_Button', { label: 'Header_SignIn_Button' });\n      await loginWithRedirect();\n    },\n    backBotton: BackNavigation,\n  };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <NavContainer $zIndex={getZIndex(location.pathname)}>\n        <FeatureAppLoader\n          featureAppId='fa-bayobab-header'\n          src={src}\n          moduleType=''\n          config={defaultConfig}\n          onError={(error: unknown): unknown => error}\n        >\n          {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n            return error ? (\n              <Col\n                style={{\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                <ErrorUi productName={'Header'} />\n              </Col>\n            ) : (\n              <Col\n                style={{\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                {featureAppNode}\n              </Col>\n            );\n          }}\n        </FeatureAppLoader>\n      </NavContainer>\n    </ThemeProvider>\n  );\n};\n\nexport default Header;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  desktop: '992px',\n};\n\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 176px;\n      margin-top: 40px;\n      @media (max-width: ${breakpoints.desktop}) {\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 100px;\n    `;\n  }}\n`;\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 24px;\n    `;\n  }}\n`;\nexport const AboutLookingHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n      padding-bottom: 58px;\n    `;\n  }}\n`;\n\nexport const AboutContainer = styled.div`\n  margin-top: 120px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  padding: 0px 88.5px;\n  @media (max-width: ${breakpoints.desktop}) {\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    padding: 0px 16px;\n    margin-top: 40px;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    margin-top: 40px;\n    padding: 0px 16px;\n  }\n`;\n\nexport const ImageWrapper = styled.div`\n  position: reative;\n\n  display: grid;\n\n  width: 100%;\n  height: auto;\n`;\n\nexport const InnerText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour-tertiary']};\n      ${typography['body-small-regular']};\n      padding-bottom: 20px;\n      padding-top: 64px;\n    `;\n  }}\n`;\n\nexport const InnerTextFirst = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour-tertiary']};\n      ${typography['body-small-regular']};\n      padding-bottom: 20px;\n    `;\n  }}\n`;\n","import React, { ReactElement } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  BannerContainer,\n  MainContainer,\n  Peering,\n  AboutContainer,\n  AboutLookingHeader,\n  ImageWrapper,\n  InnerText,\n  InnerTextFirst,\n} from './LookingGlass.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Accordion, AccordionItem } from '@mtnkente/paragon-display';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nconst LookingGlass: React.FC = () => {\n  const BannerData = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Network Tools',\n    title: 'Looking Glass',\n    bodyText:\n      'Seamlessly access vital information related to backbone routing and network efficiency.',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  const envs = {\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    lookingGlass: process.env.REACT_APP_IP_PORTAL_LOOKING_GLASS ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.banner || !urls.lookingGlass ? (\n        <Loading isLoading={true} />\n      ) : (\n        <MainContainer>\n          <BannerContainer>\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-second-banner'\n              src={urls.banner}\n              moduleType=''\n              config={{\n                bannerData: BannerData,\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Banner'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </BannerContainer>\n          <Peering>\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-looking'\n              src={urls.lookingGlass}\n              moduleType=''\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    <ErrorUi productName={'Looking Glass'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n\n            <AboutContainer>\n              <AboutLookingHeader> More about Looking Glass</AboutLookingHeader>\n              <Accordion>\n                <AccordionItem title='Understanding the Looking Glass' value='item-1'>\n                  A Looking Glass site provides information related to backbone routing and network\n                  efficiency. It encompasses three types of tests, namely PING, TRACE, and BGP .\n                  <br />\n                  <br />\n                  <ul>\n                    <li>\n                      PING allows the user to view the response time between the source address,\n                      selected location, and the specified IP address.{' '}\n                    </li>\n                    <li>\n                      TRACE allows a user to view the route taken by a packet across the network\n                      between the source address, specified location and the destination IP address.\n                    </li>\n                    <li>\n                      BGP allows a user to view the routing table entries for a specified prefix and\n                      selected location.\n                    </li>\n                  </ul>\n                  <br />\n                  <br />\n                  This tool can be used to assist external network engineers to troubleshoot routing\n                  and connectivity issues from within Bayobab IP Network.\n                </AccordionItem>\n              </Accordion>\n              <br />\n              <Accordion>\n                <AccordionItem title='The power of Bayobab’s Looking Glass' value='item-1'>\n                  Navigating the complexities of the Internet requires reliable tools. Connections\n                  can fail, and networks may struggle to communicate, whether due to BGP peering\n                  issues or other connectivity challenges.\n                  <br />\n                  <br />\n                  In these scenarios, Bayobab Looking Glass is your essential tool for\n                  troubleshooting networking problems from servers to end-user devices. It&apos;s\n                  also your trusted ally in identifying the best IP transit service provider.\n                </AccordionItem>\n              </Accordion>\n              <br />\n              <Accordion>\n                <AccordionItem\n                  style={{ width: '100%', display: 'block' }}\n                  title='How to start your search'\n                  value='item-1'\n                >\n                  <ImageWrapper>\n                    <InnerTextFirst>\n                      Select the query type: Choose between BGP, Ping, or Trace.\n                    </InnerTextFirst>\n                    <img\n                      src={process.env.REACT_APP_ASSETS_URL + '_Pre-login/query-type.webp'}\n                      alt='Looking glass'\n                      style={{ width: '100%', height: 'auto' }}\n                    />\n\n                    <InnerText>\n                      Enter the IP address or parameter: Input the relevant IP address or parameter.\n                    </InnerText>\n                    <img\n                      src={process.env.REACT_APP_ASSETS_URL + '_Pre-login/IP-Adress.webp'}\n                      alt='Looking glass'\n                      style={{ width: '100%', height: 'auto' }}\n                    />\n\n                    <InnerText>\n                      Choose the desired router location: Select the router location from the\n                      dropdown list.\n                    </InnerText>\n                    <img\n                      src={process.env.REACT_APP_ASSETS_URL + '_Pre-login/location-1.webp'}\n                      alt='Looking glass'\n                      style={{ width: '100%', height: 'auto' }}\n                    />\n                    <InnerText>Run the test: Once all fields are filled, click Search.</InnerText>\n                    <img\n                      src={process.env.REACT_APP_ASSETS_URL + '_Pre-login/search.webp'}\n                      alt='Looking glass'\n                      style={{ width: '100%', height: 'auto' }}\n                    />\n                  </ImageWrapper>\n                </AccordionItem>\n              </Accordion>\n            </AboutContainer>\n          </Peering>\n        </MainContainer>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default LookingGlass;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  tablet2: '1024px',\n  desktop: '1200px',\n};\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 100px;\n    `;\n  }}\n`;\n\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 24px;\n      padding-bottom: 35px;\n    `;\n  }}\n`;\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      @media (min-width: ${breakpoints.desktop}) {\n        padding: 0 176px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n","import React, { ReactElement } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { BannerContainer, MainContainer, Peering } from './PeeringPolicy.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nconst PeeringPolicy: React.FC = (): ReactElement => {\n  const envs = {\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    peeringList: process.env.REACT_APP_IP_PORTAL_PEERING_POLICY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const PeeringInformation = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Network Tools',\n    title: 'Peering Information',\n    bodyText: 'Our peering policy governs how we connect with other networks.',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.banner || !urls.peeringList ? (\n        <Loading isLoading={true} />\n      ) : (\n        <MainContainer>\n          <BannerContainer>\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-peering-policy-banner'\n              src={urls.banner}\n              moduleType=''\n              config={{\n                bannerData: PeeringInformation,\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Peering Policy Banner'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </BannerContainer>\n          <Peering>\n            <FeatureAppLoader\n              src={urls.peeringList}\n              moduleType=''\n              config={{\n                bannerData: PeeringInformation,\n              }}\n              onError={(error: unknown): unknown => error}\n              featureAppId={'peering-policy'}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Peering Policy'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </Peering>\n        </MainContainer>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default PeeringPolicy;\n","import styled from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\n// export const OverviewCardsContainer = styled.div`\n//   display: flex;\n//   margin-top: 2rem;\n//   gap: 2rem;\n\n//   @media (max-width: 769px) {\n//     display: grid;\n//   }\n// `;\n\nexport const OverviewCardsContainer = styled.div`\n  display: grid;\n  margin-top: 2rem;\n  gap: 2rem;\n  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n  @media (max-width: 480px) {\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  }\n`;\n\nexport const CardContainer = styled.div`\n  width: 100%;\n  flex-wrap: wrap;\n  flex-direction: column;\n`;\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React from 'react';\n\nconst FacebookIcon = (): JSX.Element => (\n  <svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'>\n    <path\n      d='M20 2.375H4C3.72386 2.375 3.5 2.5802 3.5 2.83333V21.1667C3.5 21.4198 3.72386 21.625 4 21.625H20C20.2761 21.625 20.5 21.4198 20.5 21.1667V12.75C20.5 12.3358 20.8358 12 21.25 12C21.6642 12 22 12.3358 22 12.75V21.1667C22 22.1792 21.1046 23 20 23H4C2.89543 23 2 22.1792 2 21.1667V2.83333C2 1.82081 2.89543 1 4 1H20C21.1046 1 22 1.82081 22 2.83333V3.91667C22 4.33088 21.6642 4.66667 21.25 4.66667C20.8358 4.66667 20.5 4.33088 20.5 3.91667V2.83333C20.5 2.5802 20.2761 2.375 20 2.375Z'\n      fill='#44536A'\n    />\n    <path\n      d='M21.014 7.04615C21.3157 6.76226 21.33 6.28761 21.0462 5.98598C20.7623 5.68435 20.2876 5.66996 19.986 5.95385L12.0158 13.4552L9.03033 10.4697C8.73744 10.1768 8.26256 10.1768 7.96967 10.4697C7.67678 10.7626 7.67678 11.2374 7.96967 11.5303L11.2639 14.8245C11.6652 15.2258 12.3127 15.2356 12.726 14.8467L21.014 7.04615Z'\n      fill='#44536A'\n    />\n  </svg>\n);\n\nexport default FacebookIcon;\n","import React from 'react';\n\nconst PhoneBook = (): JSX.Element => (\n  <svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'>\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M14.5 11.5C15.6046 11.5 16.5 10.6046 16.5 9.5C16.5 8.39543 15.6046 7.5 14.5 7.5C13.3954 7.5 12.5 8.39543 12.5 9.5C12.5 10.6046 13.3954 11.5 14.5 11.5ZM14.5 13C16.433 13 18 11.433 18 9.5C18 7.567 16.433 6 14.5 6C12.567 6 11 7.567 11 9.5C11 11.433 12.567 13 14.5 13Z'\n      fill='#44536A'\n    />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M16.9098 15.5H12.2494C10.8662 15.5 9.61278 16.3146 9.05103 17.5785L8.54309 18.7214C8.51468 18.7853 8.5 18.8545 8.5 18.9244V22.5H20C20.2761 22.5 20.5 22.2761 20.5 22V18.3541L20.0403 17.4348C19.4475 16.249 18.2355 15.5 16.9098 15.5ZM22 18L21.382 16.7639C20.535 15.07 18.8037 14 16.9098 14H12.2494C10.2734 14 8.48281 15.1637 7.68031 16.9693L7.17238 18.1122C7.05872 18.3679 7 18.6446 7 18.9244V24H20C21.1046 24 22 23.1046 22 22V18Z'\n      fill='#44536A'\n    />\n    <path fillRule='evenodd' clipRule='evenodd' d='M7 24V1H8.5V24H7Z' fill='#44536A' />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M0.25 5C0.25 4.58579 0.585786 4.25 1 4.25H4.5C4.91421 4.25 5.25 4.58579 5.25 5C5.25 5.41421 4.91421 5.75 4.5 5.75H1C0.585786 5.75 0.25 5.41421 0.25 5Z'\n      fill='#44536A'\n    />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M0.25 12C0.25 11.5858 0.585786 11.25 1 11.25H4.5C4.91421 11.25 5.25 11.5858 5.25 12C5.25 12.4142 4.91421 12.75 4.5 12.75H1C0.585786 12.75 0.25 12.4142 0.25 12Z'\n      fill='#44536A'\n    />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M0.25 19C0.25 18.5858 0.585786 18.25 1 18.25H4.5C4.91421 18.25 5.25 18.5858 5.25 19C5.25 19.4142 4.91421 19.75 4.5 19.75H1C0.585786 19.75 0.25 19.4142 0.25 19Z'\n      fill='#44536A'\n    />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M20 1.5H4C3.72386 1.5 3.5 1.72386 3.5 2V22C3.5 22.2761 3.72386 22.5 4 22.5H20C20.2761 22.5 20.5 22.2761 20.5 22V2C20.5 1.72386 20.2761 1.5 20 1.5ZM4 0C2.89543 0 2 0.89543 2 2V22C2 23.1046 2.89543 24 4 24H20C21.1046 24 22 23.1046 22 22V2C22 0.895431 21.1046 0 20 0H4Z'\n      fill='#44536A'\n    />\n  </svg>\n);\n\nexport default PhoneBook;\n","import React from 'react';\n\nconst EnterpriseManagement = (): JSX.Element => (\n  <svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'>\n    <path\n      d='M8.33001 9.56982H6.71001C6.59955 9.56982 6.51001 9.65937 6.51001 9.76982L6.51001 11.3898C6.51001 11.5003 6.59955 11.5898 6.71001 11.5898H8.33001C8.44047 11.5898 8.53001 11.5003 8.53001 11.3898V9.76982C8.53001 9.65937 8.44047 9.56982 8.33001 9.56982Z'\n      fill='#44536A'\n    />\n    <path\n      d='M6.71001 13.6099H8.33001C8.44047 13.6099 8.53001 13.6994 8.53001 13.8099V15.4299C8.53001 15.5403 8.44047 15.6299 8.33001 15.6299H6.71001C6.59955 15.6299 6.51001 15.5403 6.51001 15.4299V13.8099C6.51001 13.6994 6.59955 13.6099 6.71001 13.6099Z'\n      fill='#44536A'\n    />\n    <path\n      d='M14.8901 5.52979H13.2701C13.1596 5.52979 13.0701 5.61933 13.0701 5.72979V7.34978C13.0701 7.46024 13.1596 7.54979 13.2701 7.54979L14.8901 7.54979C15.0005 7.54979 15.0901 7.46024 15.0901 7.34978V5.72979C15.0901 5.61933 15.0005 5.52979 14.8901 5.52979Z'\n      fill='#44536A'\n    />\n    <path\n      d='M18.4301 5.52979H16.8101C16.6997 5.52979 16.6101 5.61933 16.6101 5.72979V7.34978C16.6101 7.46024 16.6997 7.54979 16.8101 7.54979H18.4301C18.5406 7.54979 18.6301 7.46024 18.6301 7.34978V5.72979C18.6301 5.61933 18.5406 5.52979 18.4301 5.52979Z'\n      fill='#44536A'\n    />\n    <path\n      d='M13.2701 9.56982L14.8901 9.56982C15.0005 9.56982 15.0901 9.65937 15.0901 9.76982V11.3898C15.0901 11.5003 15.0005 11.5898 14.8901 11.5898H13.2701C13.1596 11.5898 13.0701 11.5003 13.0701 11.3898V9.76982C13.0701 9.65937 13.1596 9.56982 13.2701 9.56982Z'\n      fill='#44536A'\n    />\n    <path\n      d='M16.8101 9.56982H18.4301C18.5406 9.56982 18.6301 9.65937 18.6301 9.76982V11.3898C18.6301 11.5003 18.5406 11.5898 18.4301 11.5898H16.8101C16.6997 11.5898 16.6101 11.5003 16.6101 11.3898V9.76982C16.6101 9.65937 16.6997 9.56982 16.8101 9.56982Z'\n      fill='#44536A'\n    />\n    <path\n      d='M14.8901 13.6099H13.2701C13.1596 13.6099 13.0701 13.6994 13.0701 13.8099V15.4299C13.0701 15.5403 13.1596 15.6299 13.2701 15.6299H14.8901C15.0005 15.6299 15.0901 15.5403 15.0901 15.4299V13.8099C15.0901 13.6994 15.0005 13.6099 14.8901 13.6099Z'\n      fill='#44536A'\n    />\n    <path\n      d='M18.4301 13.6099H16.8101C16.6997 13.6099 16.6101 13.6994 16.6101 13.8099V15.4299C16.6101 15.5403 16.6997 15.6299 16.8101 15.6299H18.4301C18.5406 15.6299 18.6301 15.5403 18.6301 15.4299V13.8099C18.6301 13.6994 18.5406 13.6099 18.4301 13.6099Z'\n      fill='#44536A'\n    />\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d='M12.81 2L18.9 2C20.14 2 21.15 3.01 21.15 4.25L21.15 21.68L3 21.68L3 7.53C3 6.29 4.01 5.28 5.25 5.28L10.56 5.28V4.25C10.56 3.01 11.57 2 12.81 2ZM4.5 7.53L4.5 20.18H10.56L10.56 6.78L5.25 6.78C4.84 6.78 4.5 7.12 4.5 7.53ZM12.06 20.19L19.65 20.19L19.65 4.25C19.65 3.84 19.31 3.5 18.9 3.5L12.81 3.5C12.4 3.5 12.06 3.84 12.06 4.25L12.06 20.19Z'\n      fill='#44536A'\n    />\n  </svg>\n);\n\nexport default EnterpriseManagement;\n","/* eslint-disable react/react-in-jsx-scope */\nimport FacebookIcon from '../icons/FacebookIcon';\nimport PhoneBook from '../icons/PhoneBook';\nimport EnterpriseManagement from '../icons/EnterpriseManagement';\nimport { Tick, Lock, Alert } from '@mtnkente/paragon-icons';\n\nexport const BspData = {\n  state: 'Bsp',\n  backgroundColor: 'clear',\n  icon: process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/icon-green-whatsapp.webp',\n  title: 'Connect with your customers today',\n  bodyText: `Set up a WhatsApp Business Account in under 10 minutes and connect with your customers. \\n\\nBayobab is proud to be your Business Solution Provider.`,\n  backgroundImage:\n    process.env.REACT_APP_ASSETS_URL + 'Dashboard/wbsp/Whatssapp-BSP-overview-page-image.webp',\n  subTitle: \"What you'll need\",\n  productCard: [\n    {\n      icon: <FacebookIcon />,\n      description: 'Facebook Business Manager access',\n    },\n    {\n      icon: <PhoneBook />,\n      description: 'A phone number for WhatsApp',\n    },\n    {\n      icon: <EnterpriseManagement />,\n      description: 'Business details and legal address',\n    },\n  ],\n};\n\nexport const AwaitingApprovalBannerData = {\n  state: 'Start journey',\n  backgroundColor: 'white',\n  icon: <Lock style={{ width: '32px', height: '32px', color: '#344052' }} />,\n  title: 'Awaiting Approval',\n  text: (\n    <div>\n      You&apos;ve successfully signed up! We&apos;re validating your account and will notify you via\n      email within 24 hours.\n      <br />\n      <br />\n      Meanwhile, you can manage WhatsApp Business phone numbers or create message templates.\n      Campaign creation will be available after approval\n    </div>\n  ),\n  image: process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/banner-image-desktop-whatsapp.webp',\n  buttonLabel: 'Create Template',\n  navigateTo: '/whatsapp-business-messaging/message-templates/create-template',\n};\n\nexport const AccountActiveBannerData = {\n  state: 'Start journey',\n  backgroundColor: 'white',\n  icon: <Tick style={{ width: '32px', height: '32px', color: '#53E0CC' }} />,\n  title: 'Account Active',\n  text: (\n    <div>\n      Your account is approved, and you have full access to the platform. <br />\n      <br />\n      Create campaigns, explore features, and manage your messaging to connect with your audience\n      effectively.\n    </div>\n  ),\n  image: process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/banner-image-desktop-whatsapp.webp',\n  buttonLabel: 'Create Campaign',\n  navigateTo: 'whatsapp-business-messaging/campaign-management/create-new-campaign',\n};\n\nexport const ErrorStateBannerData = {\n  state: 'Start journey',\n  backgroundColor: 'white',\n  icon: <Alert style={{ width: '32px', height: '32px', color: '#B20010' }} />,\n  title: 'Account status unknown',\n  text: \"We're unable to retrieve your account status right now due to a temporary system issue. Please try refreshing the page, if the problem continues, contact support for assistance.\",\n  image: process.env.REACT_APP_ASSETS_URL + 'Dashboard/banner/banner-image-desktop-whatsapp.webp',\n  buttonLabel: 'Contact support',\n  navigateTo: '/whatsapp-business-messaging/support-&-faqs',\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { DefaultTheme, css, styled } from 'styled-components';\n\nexport const StyledContainer = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      width: 100%;\n      padding: ${theme.floats['padding-large']};\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['margin-2xsmall']};\n      border-radius: ${theme.floats['corner-radius-small']};\n      background: ${theme.colors['colour-surface-full']};\n    `;\n  }}\n`;\n\nexport const StyledRedirectContainer = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      width: 100%;\n\n      padding: ${theme.floats['padding-none']};\n      justify-content: space-between;\n      flex-direction: column;\n      align-items: flex-start;\n\n      border-radius: ${theme.floats['corner-radius-small']};\n      background: #e2e2d9;\n    `;\n  }}\n`;\n\nexport const StyledMetricsContainer = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      height: 172px;\n      min-width: 260px;\n      padding: ${theme.floats['padding-large']};\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['margin-large']};\n      flex: 1 0 0;\n      border-radius: ${theme.floats['corner-radius-small']};\n      background: ${theme.colors['colour-surface-full']};\n      @media (max-width: 769px) {\n        min-width: 100px;\n      }\n    `;\n  }}\n`;\n\nexport const StyledContent = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: ${theme.floats['padding-medium']};\n      align-items: center;\n      gap: ${theme.floats['margin-xsmall']};\n      align-self: stretch;\n      border-radius: ${theme.floats['corner-radius-none']};\n    `;\n  }}\n`;\n\nexport const StyledButtonContent = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      // Negate left, right, and bottom padding from parent container:\n      margin: 0 -${theme.floats['padding-large']} -${theme.floats['padding-large']};\n      padding: var(--padding-large, 24px);\n\n      align-items: center;\n      gap: var(--margin-xsmall, 8px);\n      flex: 1 0 0;\n      border-radius: var(--corner-radius-none, 0px) var(--corner-radius-none, 0px)\n        var(--corner-radius-small, 16px) var(--corner-radius-small, 16px);\n      width: calc(100% + ${theme.floats['padding-large']} * 2); // Adjusts width to compensate\n      cursor: pointer;\n      transition: background-color 0.3s ease;\n\n      &:hover {\n        background-color: ${theme.colors['colour-opacity-lower-inverse']}; // #222D3C14\n      }\n    `;\n  }}\n`;\n\nexport const StyledNumber = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      padding-left: ${theme.floats['padding-medium']};\n      align-items: center;\n      gap: ${theme.floats['margin-xsmall']};\n      flex: 1 0 0;\n      border-radius: ${theme.floats['corner-radius-none']};\n    `;\n  }}\n`;\n\nexport const StyledTitle = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      gap: ${theme.floats['margin-xsmall']};\n      border-radius: ${theme.floats['corner-radius-none']};\n    `;\n  }}\n`;\n\nexport const StyledStats = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['margin-none']};\n      align-self: stretch;\n    `;\n  }}\n`;\n\nexport const StyledCaptionSemibold = styled.div`\n  ${({ theme }): DefaultTheme => theme.typography['caption-semibold']}\n  ${({ theme }): DefaultTheme => theme.colors['text-embed-text-colour']}\n`;\n\nexport const IconTextHolder = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      justify-content: space-between;\n      align-items: flex-start;\n      flex: 1 0 0;\n      gap: ${theme.floats['padding-large']};\n      padding: ${theme.floats['padding-large']};\n    `;\n  }}\n`;\n\nexport const IconWrapper = styled.div`\n  svg {\n    width: 36px;\n    height: 36px;\n  }\n`;\n\nexport const StyledRedirectButtonContent = styled.div`\n  ${({ theme }): DefaultTheme => {\n    return css`\n      display: flex;\n      padding: ${theme.floats['padding-large']};\n\n      align-items: center;\n      gap: var(--margin-xsmall, 8px);\n      flex: 1 0 0;\n      border-radius: var(--corner-radius-none, 0px) var(--corner-radius-none, 0px)\n        var(--corner-radius-small, 16px) var(--corner-radius-small, 16px);\n      cursor: pointer;\n      transition: background-color 0.3s ease;\n\n      &:hover {\n        background-color: ${theme.colors['colour-opacity-lower-inverse']};\n      }\n    `;\n  }}\n`;\n\nexport const DividerWrapper = styled.div`\n  padding: var(--margin-none, 0) var(--padding-large, 1.5rem);\n`;\n","import React, { ReactElement } from 'react';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { OverviewCardProps } from './OverviewCards.types';\nimport {\n  DividerWrapper,\n  IconTextHolder,\n  IconWrapper,\n  StyledButtonContent,\n  StyledContainer,\n  StyledContent,\n  StyledMetricsContainer,\n  StyledNumber,\n  StyledRedirectButtonContent,\n  StyledRedirectContainer,\n  StyledStats,\n  StyledTitle,\n} from './OverviewCards.styles';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Divider } from '@mtnkente/paragon-layouts';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\nimport { ChevronRight } from '@mtnkente/paragon-icons';\nimport { navigationService } from '../../../../../..';\nimport Loading from '../../../../../Loading/Loading';\n\nconst OverviewCards = (props: OverviewCardProps): ReactElement => {\n  const { cardType, icon, summary, redirectTo, loadingState, onClick } = props;\n\n  const handleStatus = (displayNum: number): JSX.Element => {\n    if (displayNum > 0) {\n      return <StatusIndicator $color='positive' />;\n    } else {\n      return <StatusIndicator $color='default' />;\n    }\n  };\n\n  const navigateTo = (): void => {\n    if (redirectTo !== null || redirectTo !== undefined || redirectTo !== '') {\n      navigationService.navigateTo(redirectTo);\n    }\n  };\n\n  return (\n    <ThemeProvider mode={'light'} platform={'bayobab'}>\n      {cardType === 'status' ? (\n        <StyledContainer>\n          {loadingState ? (\n            <Loading isLoading={loadingState} />\n          ) : (\n            <>\n              <StyledNumber>\n                <Text $fontStyle='display-small' color='full'>\n                  {props.num}\n                </Text>\n              </StyledNumber>\n              <StyledContent>\n                {handleStatus(props.num)}\n                <Text $fontStyle='caption-semibold' color='full'>\n                  {props.caption}\n                </Text>\n              </StyledContent>\n            </>\n          )}\n          <div style={{ width: '100%' }}>\n            <Divider $variant={'on-surface-full'} />\n            <StyledButtonContent onClick={navigateTo}>\n              <Text $fontStyle='caption-regular' color='full'>\n                {icon}\n                &nbsp;\n                {summary}\n              </Text>\n              <ChevronRight />\n            </StyledButtonContent>\n          </div>\n        </StyledContainer>\n      ) : cardType === 'redirect' ? (\n        <StyledRedirectContainer>\n          {loadingState ? (\n            <Loading isLoading={loadingState} />\n          ) : (\n            <IconTextHolder>\n              <IconWrapper>{icon}</IconWrapper>\n              <StyledTitle>\n                <Text $fontStyle='body-large-semibold' color='full'>\n                  {props.title}\n                </Text>\n              </StyledTitle>\n            </IconTextHolder>\n          )}\n          <div style={{ width: '100%' }}>\n            <DividerWrapper>\n              <Divider $variant={'on-surface-full'} />\n            </DividerWrapper>\n            <StyledRedirectButtonContent\n              onClick={() => {\n                if (onClick) {\n                  onClick();\n                } else if (navigateTo) {\n                  navigateTo();\n                }\n              }}\n            >\n              <Text $fontStyle='caption-regular' color='full'>\n                {summary}\n              </Text>\n              <ChevronRight />\n            </StyledRedirectButtonContent>\n          </div>\n        </StyledRedirectContainer>\n      ) : (\n        <StyledMetricsContainer>\n          <StyledContent style={{ padding: '0px' }}>\n            <Text $fontStyle='caption-semibold' color='full'>\n              {props.caption}\n            </Text>\n            {icon}\n          </StyledContent>\n          {loadingState ? (\n            <Loading isLoading={loadingState} />\n          ) : (\n            <>\n              <StyledStats>\n                <Text $fontStyle='display-small' color='full'>\n                  {props.num}\n                </Text>\n                <Text $fontStyle='caption-regular' color='full'>\n                  &nbsp;\n                  {summary}\n                </Text>\n              </StyledStats>\n            </>\n          )}\n        </StyledMetricsContainer>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default OverviewCards;\n","import apiClient from '../interceptors/auth-interceptor';\nimport { ActivePhoneNumsResponse, CompanyDetailsResponse } from '../models/overview-response';\n\nexport const getCompanyDetails = async (correlationId: string): Promise<CompanyDetailsResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wbsp-company-details-status`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      token: sessionStorage.getItem('cToken'),\n    },\n  });\n  return response.data;\n};\n\nexport const getActivePhoneNums = async (\n  correlationId: string\n): Promise<ActivePhoneNumsResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wbsp-phone-number`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      token: sessionStorage.getItem('cToken'),\n    },\n  });\n  return response.data;\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  DashboardWrapper,\n  FeatureAppContainer,\n  HeaderWrapper,\n  OverviewCardsContainer,\n} from './DashboardWbsp.style';\nimport {\n  Logout,\n  Phonebook,\n  Question,\n  Megaphone,\n  Chat,\n  Send,\n  Tick,\n  PasswordVisible,\n  Fault,\n  Alert,\n  UserSymbol,\n  UserGroup,\n} from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport {\n  BspData,\n  AccountActiveBannerData,\n  AwaitingApprovalBannerData,\n  ErrorStateBannerData,\n} from './configs/BannerData';\nimport OverviewCards from './OverviewCards/OverviewCards';\nimport { getCompanyDetails, getActivePhoneNums } from '../../../../apis/get-overview-page-details';\nimport {\n  CampaignData,\n  CampaignResponse,\n  PhoneNumsData,\n} from '../../../../models/overview-response';\nimport { getCampaign } from '../../../../apis/get-campaigns';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { InlineNotification } from '@mtnkente/paragon-overlays';\nimport Loading from '../../../../Loading/Loading';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { CustomerProfile } from '../../../../models';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\nexport interface ActionItem {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n  route: string;\n}\n\nexport type ThemeMode = 'light' | 'dark';\n\nexport const Data: {\n  themeMode: ThemeMode;\n  title: string;\n  bodyText: string;\n  actionItems: ActionItem[];\n} = {\n  themeMode: 'light',\n  title: 'Need some help setting things up?',\n  bodyText: 'Let us know! We are happy to lend a hand',\n  actionItems: [\n    {\n      id: 'support',\n      label: 'Support & FAQs',\n      icon: <Question />,\n      route: 'whatsapp-business-messaging/support-&-faqs',\n    },\n  ],\n};\n\nexport const config = {\n  themeMode: Data.themeMode,\n  title: Data.title,\n  bodyText: Data.bodyText,\n  actionItem: Data.actionItems,\n};\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const DashboardWbsp = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [loadingCompanyDetails, setloadingCompanyDetails] = useState<boolean>(true);\n  const [loadingCampaign, setLoadingCampaigns] = useState<boolean>(true);\n  const [loadingPhoneNums, setLoadingPhoneNums] = useState<boolean>(true);\n  const [failedCompanyDetails, setfailedCompanyDetails] = useState<boolean>(false);\n  const [failedPhoneNums, setfailedPhoneNums] = useState<boolean>(false);\n  const [failedCampaigns, setfailedCampaigns] = useState<boolean>(false);\n  const [campaigns, setCampaigns] = React.useState<CampaignData[]>([]);\n  const [companyDetails, setCompanyDetails] = React.useState();\n  const [phoneNums, setPhoneNums] = React.useState<PhoneNumsData>({} as PhoneNumsData);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    helpMenu: process.env.REACT_APP_FA_HELP_MENU ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'WhatsApp Business Messaging',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  useEffect(() => {\n    const fetchCompanyDetails = async (): Promise<void> => {\n      try {\n        setloadingCompanyDetails(true);\n        const response = await getCompanyDetails(CORRELATION_ID);\n        setCompanyDetails(response?.data);\n        setloadingCompanyDetails(false);\n      } catch (error) {\n        console.error(error);\n        setfailedCompanyDetails(true);\n        setloadingCompanyDetails(false);\n      }\n    };\n    fetchCompanyDetails().catch((error) => {\n      console.error('Error fetching Company Details:', error);\n    });\n\n    const fetchActivePhoneNums = async (): Promise<void> => {\n      setLoadingPhoneNums(true);\n      try {\n        const response = await getActivePhoneNums(CORRELATION_ID);\n        setPhoneNums(response);\n        setLoadingPhoneNums(false);\n      } catch (error) {\n        console.error(error);\n        setfailedPhoneNums(true);\n        setLoadingPhoneNums(false);\n      }\n    };\n    fetchActivePhoneNums().catch((error) => {\n      console.error('Error fetching Active Phone Numbers:', error);\n    });\n\n    const fetchCampaign = async (): Promise<void> => {\n      setLoadingCampaigns(true);\n      try {\n        const response: CampaignResponse = await getCampaign(CORRELATION_ID);\n        const sortedData = response.data\n          ? response.data.sort(\n              (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()\n            )\n          : [];\n        setCampaigns(sortedData);\n        setLoadingCampaigns(false);\n      } catch (error) {\n        console.error(error);\n        setfailedCampaigns(true);\n        setLoadingCampaigns(false);\n      }\n    };\n    fetchCampaign().catch((error) => {\n      console.error('Error fetching Campaigns:', error);\n    });\n  }, []);\n\n  const totalMessages = campaigns.reduce(\n    (sum, campaign) => sum + Number(campaign.totalRecipients),\n    0\n  );\n  const totalSent = campaigns.reduce((sum, campaign) => sum + Number(campaign.sent), 0);\n  const totalDelivered = campaigns.reduce((sum, campaign) => sum + Number(campaign.delivered), 0);\n  const totalRead = campaigns.reduce((sum, campaign) => sum + Number(campaign.read), 0);\n\n  const isEmptyCompanyData =\n    companyDetails == null ||\n    companyDetails === '' ||\n    (typeof companyDetails === 'object' && Object.keys(companyDetails).length === 0);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.banner || !urls.helpMenu ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-wbsp'\n                  src={urls.header}\n                  moduleType=''\n                  config={defaultConfig}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Whatsapp BSP Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            {!isEmptyCompanyData ? (\n              companyDetails?.creditLineStatus === true &&\n              companyDetails?.phoneNumberStatus === true ? (\n                // Account Active\n                <>\n                  {loadingCompanyDetails ? (\n                    <Loading isLoading={true} />\n                  ) : (\n                    <FeatureAppContainer>\n                      <FeatureAppLoader\n                        featureAppId='fa-account-active-banner'\n                        src={urls.banner}\n                        moduleType=''\n                        config={{ bannerData: AccountActiveBannerData }}\n                        onError={(error: unknown): unknown => error}\n                      >\n                        {({\n                          error,\n                          featureAppNode,\n                        }: CustomFeatureAppRenderingParams): ReactElement => {\n                          return error ? (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              <ErrorUi productName={'Dashboard Banner'} />\n                            </Col>\n                          ) : (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              {featureAppNode}\n                            </Col>\n                          );\n                        }}\n                      </FeatureAppLoader>\n                    </FeatureAppContainer>\n                  )}\n                  <FeatureAppContainer>\n                    {(failedCompanyDetails || failedPhoneNums || failedCampaigns) && (\n                      <>\n                        <InlineNotification\n                          title={'Data retrieval failed'}\n                          inputIcon={<Alert />}\n                          descriptionText={\n                            <>\n                              We&apos;re unable to load the data at this moment. Please refresh the\n                              page. <br />\n                              If the issue persists, check the Support & FAQs section.\n                            </>\n                          }\n                          $colourType={'error'}\n                          showNotification={true}\n                          isDismissable={false}\n                          $isStacked={true}\n                        ></InlineNotification>\n                      </>\n                    )}\n                  </FeatureAppContainer>\n                  <OverviewCardsContainer>\n                    <OverviewCards\n                      cardType={'status'}\n                      num={failedPhoneNums ? '--' : phoneNums?.data?.length}\n                      caption={'Active phone numbers'}\n                      icon={failedPhoneNums ? <Fault /> : <Phonebook />}\n                      summary={failedPhoneNums ? 'Could not retrieve data' : 'Manage numbers'}\n                      redirectTo={\n                        failedPhoneNums ? '' : 'whatsapp-business-messaging/account-management'\n                      }\n                      loadingState={loadingPhoneNums}\n                    ></OverviewCards>\n                    <OverviewCards\n                      cardType={'status'}\n                      num={failedCampaigns ? '--' : campaigns.length}\n                      caption={'Campaigns launched'}\n                      icon={failedCampaigns ? <Fault /> : <Megaphone />}\n                      summary={failedCampaigns ? 'Could not retrieve data' : 'Manage campaigns'}\n                      redirectTo={\n                        failedCampaigns ? '' : 'whatsapp-business-messaging/message-templates'\n                      }\n                      loadingState={loadingCampaign}\n                    ></OverviewCards>\n                  </OverviewCardsContainer>\n                  <OverviewCardsContainer>\n                    <OverviewCards\n                      cardType={'metrics'}\n                      caption={'Total messages'}\n                      icon={failedCampaigns ? <Fault /> : <Chat />}\n                      num={failedCampaigns ? '--' : totalMessages}\n                      redirectTo={''}\n                      summary={failedCampaigns ? 'Could not retrieve data' : 'Outgoing messages'}\n                      loadingState={loadingCampaign}\n                    ></OverviewCards>\n                    <OverviewCards\n                      cardType={'metrics'}\n                      caption={'Messages sent'}\n                      icon={failedCampaigns ? <Fault /> : <Send />}\n                      num={\n                        failedCampaigns\n                          ? '--'\n                          : totalSent === 0\n                            ? '0%'\n                            : `${totalMessages > 0 ? Math.round((totalSent / totalMessages) * 100) : '0'}%`\n                      }\n                      redirectTo={''}\n                      summary={\n                        failedCampaigns\n                          ? 'Could not retrieve data'\n                          : totalSent === 0\n                            ? 'No  messages sent  yet'\n                            : `${totalSent} of ${totalMessages} messages sent successfully`\n                      }\n                      loadingState={loadingCampaign}\n                    ></OverviewCards>\n                    <OverviewCards\n                      cardType={'metrics'}\n                      caption={'Messages delivered'}\n                      icon={failedCampaigns ? <Fault /> : <Tick />}\n                      num={\n                        failedCampaigns\n                          ? '--'\n                          : totalDelivered === 0\n                            ? '0%'\n                            : `${totalMessages > 0 ? Math.round((totalDelivered / totalMessages) * 100) : '0'}%`\n                      }\n                      redirectTo={''}\n                      summary={\n                        failedCampaigns\n                          ? 'Could not retrieve data'\n                          : totalDelivered === 0\n                            ? 'No messages delivered yet'\n                            : `${totalDelivered} of ${totalMessages} messages delivered`\n                      }\n                      loadingState={loadingCampaign}\n                    ></OverviewCards>\n                    <OverviewCards\n                      cardType={'metrics'}\n                      caption={'Messages read'}\n                      icon={failedCampaigns ? <Fault /> : <PasswordVisible />}\n                      num={\n                        failedCampaigns\n                          ? '--'\n                          : totalRead === 0\n                            ? '0%'\n                            : `${totalMessages > 0 ? Math.round((totalRead / totalMessages) * 100) : '0'}%`\n                      }\n                      summary={\n                        failedCampaigns\n                          ? 'Could not retrieve data'\n                          : totalRead === 0\n                            ? 'No messages read yet'\n                            : `${totalRead} of ${totalMessages} messages read`\n                      }\n                      redirectTo={''}\n                      loadingState={loadingCampaign}\n                    ></OverviewCards>\n                  </OverviewCardsContainer>\n                </>\n              ) : // Awaiting Apprival\n              loadingCompanyDetails ? (\n                <Loading isLoading={true} />\n              ) : (\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-awaiting-approval-banner'\n                    src={urls.banner}\n                    moduleType=''\n                    config={{ bannerData: AwaitingApprovalBannerData }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Dashboard Banner'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              )\n            ) : failedCompanyDetails ? (\n              // Error State\n              loadingCompanyDetails ? (\n                <Loading isLoading={true} />\n              ) : (\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-error-state-banner'\n                    src={urls.banner}\n                    moduleType=''\n                    config={{ bannerData: ErrorStateBannerData }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Dashboard Banner'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            background: '#fff',\n                            borderRadius: '24px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              )\n            ) : // Get Started\n            loadingCompanyDetails ? (\n              <Loading isLoading={true} />\n            ) : (\n              <FeatureAppContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-wsp-banner'\n                  src={urls.banner}\n                  moduleType=''\n                  config={{ bannerData: BspData }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Whatsapp BSP Banner'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                          background: '#fff',\n                          borderRadius: '24px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FeatureAppContainer>\n            )}\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-wsp-help-menu'\n                src={urls.helpMenu}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Whatsapp BSP Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n","import apiClient from '../interceptors/auth-interceptor';\nimport { CampaignResponse } from '../models/overview-response';\n\nexport const getCampaign = async (correlationId: string): Promise<CampaignResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wsp-get-campaign`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      token: sessionStorage.getItem('cToken'),\n      email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n    },\n  });\n  return response.data;\n};\n","import styled from 'styled-components';\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n`;\n\nexport const DashboardWrapper = styled.div`\n  /* @media (max-width: 1023px) {\n    padding: 20px 40px 0px 40px;\n  } */\n  /* @media only screen and (min-width: 1024px) {\n    padding: 0px 40px 40px 40px;\n  }  */\n  @media (min-width: 1919px) {\n    margin: 0 -40px;\n  }\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ThemeMode } from '../../../../types/TemplateTable.types';\n\nexport interface MenuItem {\n  label: string;\n}\n\nexport const Data: {\n  themeMode: ThemeMode;\n  templateNameLabels: {\n    newDropAlertLabel: string;\n    templateNameTitle: string;\n  };\n  templateColumnLabels: {\n    templateNameLabel: string;\n    categoryLabel: string;\n    statusLabel: string;\n    actionsLabel: string;\n  };\n  templateRow: {\n    templateNameTitle: string;\n    templateNameCategory: string;\n    statusTitles: {\n      activeHighQualityTitle: string;\n      activePendingTitle: string;\n      pendingTitle: string;\n      activeMediumQualityTitle: string;\n      pausedTitle: string;\n      activeLowQualityTitle: string;\n      draftTitle: string;\n      rejectedTitle: string;\n    };\n  };\n  deleteModal: {\n    title: string;\n    templateName: string;\n    textParts: string[];\n  };\n  filter: {\n    title: string;\n    isFilterSheetOpen?: boolean;\n    toggleFilterSheet?: () => void;\n  };\n  setUpTemplate: {\n    title: string;\n    introductionText: string;\n    description: string;\n  };\n  submitTemplate: {\n    title: string;\n    bodyTextParts: string[];\n  };\n  customTemplate: {\n    headerTitle: string;\n    headerBodyText: string;\n    languageTitle: string;\n    textInputLabel: string;\n    textInputPlaceholder: string;\n    languageDropdownLabel: string;\n    contentDropdownLabel: string;\n    introTextBadge: string;\n    introBodyText: string;\n    contentHeaderTitle: string;\n    inputContTextAreaLabel: string;\n    inputContTextAreaPlaceholder: string;\n    headerLabel: string;\n    footerLabel: string;\n    footerTextAreaLabel: string;\n    footerTextAreaPlaceholder: string;\n    buttonsTextBadge: string;\n    buttonsCaptionText: string;\n    buttonBodyText: string;\n    informativeTitle: string;\n    informativeDescrText: string;\n    warningTitle: string;\n    warningDescrText: string;\n    languageMenuItems: MenuItem[];\n    headerMenuItems: MenuItem[];\n    // checkboxGroupTitle: string;\n    // checkboxGroupPlaceholder: string;\n  };\n} = {\n  themeMode: 'light',\n  templateRow: {\n    templateNameTitle: 'Template Name',\n    templateNameCategory: 'Marketing',\n    statusTitles: {\n      activeHighQualityTitle: 'Active - High Quality',\n      activePendingTitle: 'Active - Quality Pending',\n      pendingTitle: 'Pending',\n      activeMediumQualityTitle: 'Active - Medium Quality',\n      pausedTitle: 'Paused',\n      activeLowQualityTitle: 'Active - Low Quality',\n      draftTitle: 'Draft',\n      rejectedTitle: 'Rejected',\n    },\n  },\n  deleteModal: {\n    title: 'Delete template',\n    templateName: \" '{{templateName}}' \",\n    textParts: [\"You're going to delete the\", 'template. Are you sure?'],\n  },\n  filter: {\n    title: 'Filter by',\n  },\n  setUpTemplate: {\n    title: 'Set up your message template',\n    introductionText:\n      \"Choose the category that best fits your message template, then pick the type of message you'd like to send.\",\n    description:\n      'Marketing templates are for promotions or information about your business, products, or services. Examples include welcome messages, newsletters, offers, coupons, catalogs, or updates like new store hours.',\n  },\n  submitTemplate: {\n    title: 'Success!',\n    bodyTextParts: [\n      'Your',\n      \" message template is now under review. You'll receive an email notification once the status has been updated.\",\n    ],\n  },\n  customTemplate: {\n    headerTitle: 'your_template_name · English',\n    headerBodyText: 'Marketing · Custom',\n    languageTitle: 'Template name and language',\n    textInputLabel: 'Template name',\n    textInputPlaceholder: 'Name of your template',\n    languageDropdownLabel: 'Language',\n    contentDropdownLabel: 'Header Type',\n    introTextBadge: 'Content',\n    introBodyText: ' Complete the header, body and footer sections for your template.',\n    contentHeaderTitle: 'Body',\n    inputContTextAreaLabel: 'Your Message',\n    inputContTextAreaPlaceholder: 'Hello',\n    headerLabel: 'Header',\n    footerLabel: 'Footer',\n    footerTextAreaLabel: 'Footer text',\n    footerTextAreaPlaceholder: 'Enter your text',\n    buttonsTextBadge: 'Buttons',\n    buttonsCaptionText: '(Optional)',\n    buttonBodyText:\n      \"Create buttons that let customers respond to your message or take action. Select the buttons you'd like to include in your messages and modify them below.\",\n    informativeTitle: 'We recommend adding the marketing opt-out button',\n    informativeDescrText:\n      'Allow customers to request to opt out of all marketing messages. This can help reduce blocks from customers and increase your quality rating.',\n    warningTitle: 'Too many variable parameters',\n    warningDescrText:\n      'Please decrease the number of variable parameters or increase the message length. Learn more about formatting and message guidelines.',\n    languageMenuItems: [\n      { label: 'English' },\n      { label: 'English (US)' },\n      { label: 'French' },\n      { label: 'Spanish (SPA)' },\n    ],\n    headerMenuItems: [\n      { label: 'None' },\n      { label: 'Text' },\n      { label: 'Image' },\n      { label: 'Video' },\n      { label: 'Document' },\n    ],\n    // checkboxGroupTitle: 'Add Buttons',\n    // checkboxGroupPlaceholder:\n    //   \"Select the buttons you'd like to include in your messages and modify them below.\",\n  },\n  templateNameLabels: {\n    newDropAlertLabel: 'New Drop Alert',\n    templateNameTitle: 'Template Name',\n  },\n  templateColumnLabels: {\n    templateNameLabel: 'Template Name',\n    categoryLabel: 'Category',\n    statusLabel: 'Status',\n    actionsLabel: 'Actions',\n  },\n};\n\nexport const config = {\n  themeMode: Data.themeMode,\n  templateNameLabels: {\n    newDropAlertLabel: Data.templateNameLabels.newDropAlertLabel,\n    templateNameTitle: Data.templateNameLabels.templateNameTitle,\n  },\n  templateColumnLabels: {\n    templateNameLabel: Data.templateColumnLabels.templateNameLabel,\n    statusLabel: Data.templateColumnLabels.statusLabel,\n    actionsLabel: Data.templateColumnLabels.actionsLabel,\n  },\n  templateRow: {\n    templateNameTitle: Data.templateRow.templateNameTitle,\n    templateNameCategory: Data.templateRow.templateNameCategory,\n    statusTitles: {\n      activeHighQualityTitle: Data.templateRow.statusTitles.activeHighQualityTitle,\n      activePendingTitle: Data.templateRow.statusTitles.activePendingTitle,\n      pendingTitle: Data.templateRow.statusTitles.pendingTitle,\n      activeMediumQualityTitle: Data.templateRow.statusTitles.activeMediumQualityTitle,\n      pausedTitle: Data.templateRow.statusTitles.pausedTitle,\n      activeLowQualityTitle: Data.templateRow.statusTitles.activeLowQualityTitle,\n      draftTitle: Data.templateRow.statusTitles.draftTitle,\n      rejectedTitle: Data.templateRow.statusTitles.rejectedTitle,\n    },\n  },\n  deleteModal: {\n    title: Data.deleteModal.title,\n    templateName: Data.deleteModal.templateName,\n    textParts: Data.deleteModal.textParts,\n  },\n  filter: {\n    title: Data.filter.title,\n    isFilterSheetOpen: Data.filter.isFilterSheetOpen,\n    toggleFilterSheet: Data.filter.toggleFilterSheet,\n  },\n  setUpTemplate: {\n    title: Data.setUpTemplate.title,\n    introductionText: Data.setUpTemplate.introductionText,\n    description: Data.setUpTemplate.description,\n  },\n  submitTemplate: {\n    title: Data.submitTemplate.title,\n    bodyTextParts: Data.submitTemplate.bodyTextParts,\n  },\n  customTemplate: {\n    headerTitle: Data.customTemplate.headerTitle,\n    headerBodyText: Data.customTemplate.headerBodyText,\n    languageTitle: Data.customTemplate.languageTitle,\n    textInputLabel: Data.customTemplate.textInputLabel,\n    textInputPlaceholder: Data.customTemplate.textInputPlaceholder,\n    languageDropdownLabel: Data.customTemplate.languageDropdownLabel,\n    contentDropdownLabel: Data.customTemplate.contentDropdownLabel,\n    introTextBadge: Data.customTemplate.introTextBadge,\n    introBodyText: Data.customTemplate.introBodyText,\n    contentHeaderTitle: Data.customTemplate.contentHeaderTitle,\n    inputContTextAreaLabel: Data.customTemplate.inputContTextAreaLabel,\n    inputContTextAreaPlaceholder: Data.customTemplate.inputContTextAreaPlaceholder,\n    headerLabel: Data.customTemplate.headerLabel,\n    footerLabel: Data.customTemplate.footerLabel,\n    footerTextAreaLabel: Data.customTemplate.footerTextAreaLabel,\n    footerTextAreaPlaceholder: Data.customTemplate.footerTextAreaPlaceholder,\n    buttonsTextBadge: Data.customTemplate.buttonsTextBadge,\n    buttonsCaptionText: Data.customTemplate.buttonsCaptionText,\n    buttonBodyText: Data.customTemplate.buttonBodyText,\n    informativeTitle: Data.customTemplate.informativeTitle,\n    informativeDescrText: Data.customTemplate.informativeDescrText,\n    warningTitle: Data.customTemplate.warningTitle,\n    warningDescrText: Data.customTemplate.warningDescrText,\n    languageMenuItems: Data.customTemplate.languageMenuItems,\n    headerMenuItems: Data.customTemplate.headerMenuItems,\n    // checkboxGroupTitle: Data.customTemplate.checkboxGroupTitle,\n    // checkboxGroupPlaceholder: Data.customTemplate.checkboxGroupPlaceholder,\n  },\n};\n","import apiClient from '../interceptors/auth-interceptor';\nimport { Feedback } from '../models/feedback';\nimport { ProvideFeedbackResponse } from '../models/provide-feedback-response';\n\nexport async function sendFeedback(\n  correlationId: string,\n  feedbackForm: Feedback\n): Promise<ProvideFeedbackResponse> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-central-provide-feedback-logs`;\n\n  const response = await apiClient.post(url, feedbackForm, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      userEmail: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n    },\n  });\n\n  return response.data;\n}\n\nexport async function getSubmissionDate(correlationId: string): Promise<ProvideFeedbackResponse> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-central-provide-feedback-logs`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      userEmail: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      type: 'Get',\n    },\n  });\n\n  return response?.data?.message;\n}\n","import { useEffect } from 'react';\nimport { getSubmissionDate } from '../apis/send-feedback';\n\ninterface UseFetchSubmissionsProps {\n  correlationId: string;\n  isSubmitted?: boolean;\n  updateSubmissions: (data: any) => void;\n  isAuthenticated: boolean;\n}\n\nexport const useFetchSubmissions = ({\n  correlationId,\n  isSubmitted,\n  updateSubmissions,\n  isAuthenticated,\n}: UseFetchSubmissionsProps): void => {\n  useEffect(() => {\n    const fetchSubmissions = async (): Promise<void> => {\n      if (isAuthenticated) {\n        try {\n          const response = await getSubmissionDate(correlationId);\n          updateSubmissions(response);\n        } catch (error) {\n          console.error('Error fetching submissions:', error);\n        }\n      }\n    };\n\n    fetchSubmissions().catch((error) => {\n      // Extra safety — this satisfies ESLint and prevents unhandled promise rejection\n      console.error('Error in fetchSubmissions:', error);\n    });\n  }, [correlationId, isSubmitted, getSubmissionDate, updateSubmissions]);\n};\n","import { useMemo } from 'react';\n\ninterface Submission {\n  id: number;\n  type?: string;\n  createdAt?: string;\n  [key: string]: unknown;\n}\n\nexport function getLatestSubmissionByType(\n  submissions: Submission[],\n  formType: string\n): Submission | null {\n  const filtered = submissions?.filter((item) => item?.formType === formType && item?.createdAt);\n\n  if (filtered?.length === 0) return null;\n\n  return filtered?.reduce((latest, current) =>\n    new Date(current.createdAt!) > new Date(latest.createdAt!) ? current : latest\n  );\n}\n\nexport function submittedWithin90Days(date: string): boolean {\n  const now = Date.now();\n  const submitted = new Date(date).getTime();\n  const days90 = 90 * 24 * 60 * 60 * 1000;\n\n  return now - submitted <= days90;\n}\n\nexport function useShouldShowFeedback(submissions: Submission[], formType: string): boolean {\n  return useMemo(() => {\n    const latestSubmission = getLatestSubmissionByType(submissions, formType);\n\n    if (!latestSubmission?.createdAt) {\n      return true;\n    }\n\n    return !submittedWithin90Days(latestSubmission?.createdAt);\n  }, [submissions, formType]);\n}\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Modal = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    width: 500px;\n    padding: ${theme.floats['padding-none']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-3xlarge']};\n\n    position: absolute;\n    right: 30px;\n    bottom: 30px;\n    z-index: 1000;\n\n    border-radius: ${theme.floats['corner-radius-small']};\n    border: 1px solid ${theme.colors['border-colour-opacity-low-inverse']};\n    background: ${theme.colors['sheet-side-elevated-container-colour']};\n\n    box-shadow: 0 ${theme.floats['shadow-level-3-y']} ${theme.floats['shadow-level-3-blur']}\n      ${theme.floats['shadow-level-3-spread']} ${theme.colors['shadow-level-3-colour']};\n  `}\n`;\n\nexport const MainContent = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-xlarge']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-2xlarge']};\n    align-self: stretch;\n  `}\n`;\n\nexport const DetailsContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-xlarge']};\n    align-self: stretch;\n  `}\n`;\n\nexport const TitleBar = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n\n  svg {\n    width: 24px;\n    height: 24px;\n    aspect-ratio: 1/1;\n    cursor: pointer;\n  }\n`;\n\nexport const ConfirmationWrapper = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: ${theme.floats['padding-large']};\n    flex: 1;\n    height: 100%;\n    min-height: 100%;\n    padding: ${theme.floats['padding-large']};\n  `}\n`;\n","export const FeedbackModalForm = {\n  buttonStatus: false,\n  comboButtons: true,\n  leftButtonLabel: 'Cancel',\n  rightButtonLabel: 'Send Feedback',\n  handleSubmit: (): void => {},\n  leftButtonAction: (): void => {},\n\n  formSections: [\n    {\n      title: 'How was your experience completing this task?',\n      isAdjacent: false,\n      isMobileAdjacent: false,\n      fields: [{ label: 'Rating', name: 'rating', type: 'rating', isOptional: false }],\n    },\n    {\n      title: 'What worked well or what could be improved?',\n      isAdjacent: false,\n      isMobileAdjacent: false,\n      fields: [\n        { label: 'Please Tell Us More', name: 'suggestions', type: 'textarea', isOptional: true },\n      ],\n    },\n    {\n      isAdjacent: false,\n      fields: [\n        {\n          name: 'contactMe',\n          type: 'checkbox',\n          isOptional: true,\n          disclaimer:\n            'We’ll use your feedback to improve our products. Please don’t include personal or confidential details. For technical issues, kindly raise a support ticket instead.',\n          options: [\n            {\n              label: 'You may contact me about this feedback',\n            },\n          ],\n        },\n      ],\n    },\n  ],\n};\n","export class Feedback {\n  feedbackType: string;\n  rating: string;\n  comment: string;\n  contactMe: string;\n  formType: string;\n  phoneNumber: string;\n\n  constructor(data: Feedback) {\n    this.feedbackType = data.feedbackType;\n    this.rating = data.rating;\n    this.comment = data.comment;\n    this.contactMe = data.contactMe;\n    this.formType = data.formType;\n    this.phoneNumber = data.phoneNumber;\n  }\n}\n","import React, { Dispatch, SetStateAction } from 'react';\nimport { ConfirmationWrapper } from './FeedbackModal.styled';\nimport { Fault, Tick } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\n\ninterface ConfirmationModalProps {\n  hasError: boolean;\n  setIsVisible: Dispatch<SetStateAction<boolean>>;\n}\n\nconst ConfirmationScreen = ({ hasError, setIsVisible }: ConfirmationModalProps): JSX.Element => {\n  return (\n    <ConfirmationWrapper>\n      {!hasError ? (\n        <Tick color='#398004' width={'3.375rem'} height={'3.375rem'} />\n      ) : (\n        <Fault color='#B20010' width={'3.375rem'} height={'3.375rem'} />\n      )}\n      <Text style={{ textAlign: 'center' }} $colour='full' $fontStyle={'title-small-bold'}>\n        {!hasError ? 'Feedback sent, thank you!' : 'Error submitting feedback'}\n      </Text>\n      <Text\n        style={{ textAlign: 'center' }}\n        $colour='subtle-inverse'\n        $fontStyle={'body-small-regular'}\n      >\n        {!hasError\n          ? 'We use your feedback to help improve the Bayobab Central Customer Portal.'\n          : 'Failed to submit feedback. Please try again.'}\n      </Text>\n      <StandardButton label={'Close'} $variant='primary' onClick={() => setIsVisible(false)} />\n    </ConfirmationWrapper>\n  );\n};\n\nexport default ConfirmationScreen;\n","import React, { ReactElement, useState } from 'react';\nimport { FeedbackModalProps } from '../../../../types/feedback-forms.types';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Close } from '@mtnkente/paragon-icons';\nimport { Modal, MainContent, DetailsContainer, TitleBar } from './FeedbackModal.styled';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Col } from '@mtnkente/paragon-foundation';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { FeedbackModalForm } from '../configs/feedback-modal-config';\nimport { capitalizeFirstLetter } from '../../../../utils/capitalise-text';\nimport { Feedback } from '../../../../models/feedback';\nimport { sendFeedback } from '../../../../apis/send-feedback';\nimport { CORRELATION_ID } from '../../../../utils/constants';\nimport ConfirmationScreen from './Confirmation';\n\nconst FeedbackModal = ({\n  setIsVisible,\n  profile,\n  formType,\n  continueLogout,\n}: FeedbackModalProps): JSX.Element => {\n  const [hasError, setHasError] = useState(false);\n  const [openModal, setOpenModal] = useState(false);\n\n  const envs = {\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const ratingMap: Record<string, string> = {\n    Terrible: '1',\n    Bad: '2',\n    Okay: '3',\n    Good: ' 4',\n    Great: '5',\n  };\n\n  const handleSubmit = async (formData: any): Promise<void> => {\n    try {\n      const formattedData = {\n        ...formData,\n        feedbackType: 'General feedback',\n        rating: ratingMap[formData.rating] ?? '0',\n        comment: formData.suggestions ? capitalizeFirstLetter(formData.suggestions) : '',\n        formType: formType,\n        phoneNumber: JSON.parse(Object(sessionStorage.getItem('profile')))?.contactNumber,\n        contactMe: !!formData.contactMe,\n      };\n\n      await sendFeedback(CORRELATION_ID, new Feedback(formattedData));\n      setHasError(false);\n      setOpenModal(true);\n    } catch (error) {\n      console.error('Error submitting feedback:', error);\n      setHasError(true);\n      setOpenModal(true);\n    }\n  };\n\n  const leftButtonAction = (): void => {\n    setIsVisible(false);\n    if (formType === 'logout') {\n      continueLogout();\n    }\n  };\n\n  const formContent = {\n    ...FeedbackModalForm,\n    handleSubmit,\n    leftButtonAction,\n  };\n\n  return (\n    <>\n      {!urls.connectForm ? (\n        <Loading isLoading />\n      ) : (\n        <Modal>\n          <MainContent>\n            <DetailsContainer>\n              <TitleBar>\n                {!openModal ? (\n                  <Text $fontStyle='title-small-bold'>We&apos;d love your feedback</Text>\n                ) : (\n                  <Text $fontStyle='title-small-bold'>Thank you!</Text>\n                )}\n                <Close onClick={leftButtonAction} />\n              </TitleBar>\n\n              {openModal ? (\n                <ConfirmationScreen hasError={!!hasError} setIsVisible={setIsVisible} />\n              ) : (\n                <FeatureAppLoader\n                  featureAppId='fa-feedback-form'\n                  src={urls.connectForm}\n                  moduleType=''\n                  config={{\n                    data: formContent,\n                    userInfo: profile,\n                    isFeedbackForm: true,\n                  }}\n                  onError={(error: unknown) => {\n                    console.error('Error loading feedback form:', error);\n                    return error;\n                  }}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => (\n                    <Col style={{ flex: 1, width: '100%', padding: 0 }} $xs={0}>\n                      {error ? <ErrorUi productName='Request Product' /> : featureAppNode}\n                    </Col>\n                  )}\n                </FeatureAppLoader>\n              )}\n            </DetailsContainer>\n          </MainContent>\n        </Modal>\n      )}\n    </>\n  );\n};\n\nexport default FeedbackModal;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { DashboardWrapper } from './MessageTemplates.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { config } from './MessageTemplateConfig';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { useLocation } from 'react-router-dom';\nimport { useFetchSubmissions } from '../../../../hooks/use-fetch-submissions';\nimport { useShouldShowFeedback } from '../../../../utils/get-submission-period';\nimport FeedbackModal from '../../feedback/feedbackModal/FeedbackModal';\n\ninterface MessageTemplateProps {\n  name: string;\n  isSupueruser: boolean;\n  profile?: CustomerProfile;\n  logoutF?: () => Promise<void>;\n}\n\nconst MessageTemplates = ({\n  name,\n  isSupueruser,\n  profile,\n  logoutF,\n}: MessageTemplateProps): ReactElement => {\n  const { user } = useAuth0();\n  const [src, setSrc] = useState<string | null>(null);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [submissions, updateSubmissions] = useState<any[]>([]);\n  const [showFeedbackModal, setShowFeedbackModal] = useState(false);\n\n  const location = useLocation();\n  const searchParams = new URLSearchParams(location.search);\n  const isSubmitted = searchParams.get('isSubmitted') === 'true';\n\n  const correlationId = CORRELATION_ID;\n\n  useFetchSubmissions({\n    correlationId,\n    isSubmitted,\n    updateSubmissions,\n  });\n\n  const shouldShowFeedback = useShouldShowFeedback(submissions, 'campaigns');\n\n  useEffect(() => {\n    if (!submissions.length) {\n      return;\n    }\n    if (shouldShowFeedback && isSubmitted) {\n      setShowFeedbackModal(true);\n    }\n  }, [isSubmitted, submissions]);\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'dashboard',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n\n    [name, profile]\n  );\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(process.env.REACT_APP_FA_TEMPLATES + 'fa-main/asset-manifest.json', {\n        cache: 'no-cache',\n      });\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_TEMPLATES}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {src && profile && (\n        <DashboardWrapper data-testid='message-template-app-container'>\n          <div data-testid='message-template-shell-container'>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-message-templates'\n                src={src}\n                moduleType=''\n                config={{\n                  themeMode: config.themeMode,\n                  templateNameLabels: {\n                    newDropAlertLabel: config.templateNameLabels.newDropAlertLabel,\n                    templateNameTitle: config.templateNameLabels.templateNameTitle,\n                  },\n                  templateColumnLabels: {\n                    templateNameLabel: config.templateColumnLabels.templateNameLabel,\n                    statusLabel: config.templateColumnLabels.statusLabel,\n                    actionsLabel: config.templateColumnLabels.actionsLabel,\n                  },\n                  templateRow: {\n                    templateNameTitle: config.templateRow.templateNameTitle,\n                    templateNameCategory: config.templateRow.templateNameCategory,\n                    statusTitles: {\n                      activeHighQualityTitle:\n                        config.templateRow.statusTitles.activeHighQualityTitle,\n                      activePendingTitle: config.templateRow.statusTitles.activePendingTitle,\n                      pendingTitle: config.templateRow.statusTitles.pendingTitle,\n                      activeMediumQualityTitle:\n                        config.templateRow.statusTitles.activeMediumQualityTitle,\n                      pausedTitle: config.templateRow.statusTitles.pausedTitle,\n                      activeLowQualityTitle: config.templateRow.statusTitles.activeLowQualityTitle,\n                      draftTitle: config.templateRow.statusTitles.draftTitle,\n                      rejectedTitle: config.templateRow.statusTitles.rejectedTitle,\n                    },\n                  },\n                  deleteModal: {\n                    title: config.deleteModal.title,\n                    templateName: config.deleteModal.templateName,\n                    textParts: config.deleteModal.textParts,\n                  },\n                  filter: {\n                    title: config.filter.title,\n                    isFilterSheetOpen: config.filter.isFilterSheetOpen,\n                    toggleFilterSheet: config.filter.toggleFilterSheet,\n                  },\n                  setUpTemplate: {\n                    title: config.setUpTemplate.title,\n                    introductionText: config.setUpTemplate.introductionText,\n                    description: config.setUpTemplate.description,\n                  },\n                  submitTemplate: {\n                    title: config.submitTemplate.title,\n                    bodyTextParts: config.submitTemplate.bodyTextParts,\n                  },\n                  customTemplate: {\n                    headerTitle: config.customTemplate.headerTitle,\n                    headerBodyText: config.customTemplate.headerBodyText,\n                    languageTitle: config.customTemplate.languageTitle,\n                    textInputLabel: config.customTemplate.textInputLabel,\n                    textInputPlaceholder: config.customTemplate.textInputPlaceholder,\n                    languageDropdownLabel: config.customTemplate.languageDropdownLabel,\n                    contentDropdownLabel: config.customTemplate.contentDropdownLabel,\n                    introTextBadge: config.customTemplate.introTextBadge,\n                    introBodyText: config.customTemplate.introBodyText,\n                    contentHeaderTitle: config.customTemplate.contentHeaderTitle,\n                    inputContTextAreaLabel: config.customTemplate.inputContTextAreaLabel,\n                    inputContTextAreaPlaceholder:\n                      config.customTemplate.inputContTextAreaPlaceholder,\n                    headerLabel: config.customTemplate.headerLabel,\n                    footerLabel: config.customTemplate.footerLabel,\n                    footerTextAreaLabel: config.customTemplate.footerTextAreaLabel,\n                    footerTextAreaPlaceholder: config.customTemplate.footerTextAreaPlaceholder,\n                    buttonsTextBadge: config.customTemplate.buttonsTextBadge,\n                    buttonsCaptionText: config.customTemplate.buttonsCaptionText,\n                    buttonBodyText: config.customTemplate.buttonBodyText,\n                    informativeTitle: config.customTemplate.informativeTitle,\n                    informativeDescrText: config.customTemplate.informativeDescrText,\n                    languageMenuItems: config.customTemplate.languageMenuItems,\n                    headerMenuItems: config.customTemplate.headerMenuItems,\n                    warningDescrText: config.customTemplate.warningDescrText,\n                    warningTitle: config.customTemplate.warningTitle,\n                  },\n                  logout: logoutF,\n                  username: name,\n                  userImage: user?.picture,\n                  defaultConfig: defaultConfig,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Message Template Table'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n            {showFeedbackModal && (\n              <FeedbackModal\n                setIsVisible={setShowFeedbackModal}\n                isVisible={!!showFeedbackModal}\n                profile={profile}\n                formType={'campaigns'}\n              />\n            )}\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\nexport default MessageTemplates;\n","import styled, { css, DefaultTheme } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  margin: 2rem auto 0;\n  border-radius: 16px;\n  background: #ffffff;\n  padding: 48px;\n  max-width: 1080px;\n  max-height: 1349px;\n`;\nexport const DisclaimerContainer = styled.div`\n  margin-top: 2rem;\n  border-radius: 16px;\n  background: #ffffff;\n  padding: 48px;\n`;\n\nexport const DisclaimerHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n      margin: 0 0 32px 0px;\n    `;\n  }}\n`;\nexport const DisclaimerText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n      margin: 24px 0px;\n    `;\n  }}\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, StyledAppContainer } from './LatencyMatrix.style';\nimport { Logout, Email, Question, UserSymbol, UserGroup } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\nimport { useFeatureAppUrls } from '../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../Loading/Loading';\nimport { CustomerProfile } from '../../../models';\nimport { MappedNotification } from '../../../types/mapped-notification';\nimport { editNotification } from '../../../apis/edit-notification';\nimport { getNotification } from '../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../utils/map-notification';\nimport { BannerContainer } from '../../unauthorization/IpPortal/LookingGlass/LookingGlass.style';\nimport Footer from '../../unauthorization/IpPortal/Footer/Footer';\n\nexport interface ActionItem {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n}\n\nexport type ThemeMode = 'light' | 'dark';\n\nexport const Data: {\n  themeMode: ThemeMode;\n  title: string;\n  bodyText: string;\n  actionItems: ActionItem[];\n} = {\n  themeMode: 'light',\n  title: 'Need some help setting things up?',\n  bodyText: 'Let us know! We are happy to lend a hand',\n  actionItems: [\n    {\n      id: 'email',\n      label: 'Send an Email',\n      icon: <Email />,\n    },\n    {\n      id: 'support',\n      label: 'Support & FAQs',\n      icon: <Question />,\n    },\n  ],\n};\n\nexport const config = {\n  themeMode: Data.themeMode,\n  title: Data.title,\n  bodyText: Data.bodyText,\n  actionItems: Data.actionItems,\n};\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst LatencyMatrix = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  const BannerData = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Network Tools',\n    title: 'Latency Matrix',\n    bodyText:\n      'Visualise and reduce network delays with our Latency Matrix. Quickly identify high-latency paths and optimise your network for a superior user experience.',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    latencyMatrix: process.env.REACT_APP_FA_LATENCY_MATRIX ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Hello',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      //overviewText: 'Latency Matrix',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.banner || !urls.latencyMatrix ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container'>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-wbsp'\n                src={urls.header}\n                moduleType=''\n                config={HeaderData}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Whatsapp BSP Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n            <BannerContainer style={{ marginTop: '24px' }}>\n              <FeatureAppLoader\n                featureAppId='fa-bayobab-second-banner'\n                src={urls.banner}\n                moduleType=''\n                config={{\n                  bannerData: BannerData,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                    >\n                      <ErrorUi productName={'Banner'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </BannerContainer>\n            <StyledAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-LatencyMatrix'\n                src={urls.latencyMatrix}\n                config={{ type: '' }}\n                moduleType='umd'\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'LatencyMatrix'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </StyledAppContainer>\n          </div>\n          <Footer />\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default LatencyMatrix;\n","import styled from 'styled-components';\n\n// const breakpoints = { mobile: '576px', tablet: '768px', desktop: '992px', iPadPro: '1024px' };\n\nexport const ProfileContainer = styled.div`\n  padding: '10px 40px 10px 40px';\n  margin-bottom: 32px;\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n// import profileHeader from '.../..';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { CustomerProfile } from '../../../../models';\nimport profileHeader from '../../../../assets/imgs/profile-header.jpg';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { ProfileContainer } from './Profile.style';\n\ninterface ProfileProps {\n  profile?: CustomerProfile;\n  logoutF?: () => Promise<void>;\n}\n\nconst Profile = ({ profile, logoutF }: ProfileProps): JSX.Element => {\n  const { user } = useAuth0();\n  const [src, setSrc] = useState<string | null>(null);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_IP_PORTAL_PROFILE_HEADER + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_IP_PORTAL_PROFILE_HEADER}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  const profileContent = {\n    profileBanner: {\n      headerImage: profileHeader,\n      name: profile?.fullName ?? '',\n      contact: profile?.contactNumber ?? '',\n      email: profile?.emailAddress ?? '',\n      jobTitle: profile?.role ?? '',\n      image: user?.picture,\n    },\n    profileCards: [\n      {\n        title: 'Company Credentials',\n        isTag: false,\n        children: [\n          ['Company Name', profile?.companyDetails?.name ?? ''],\n          [\n            'Company Address',\n            `${profile?.companyDetails?.address?.countryCode}, ${profile?.companyDetails?.address?.country}`,\n          ],\n          ['Website URL', profile?.companyDetails?.website ?? ''],\n        ],\n      },\n      {\n        title: 'Communication Preferences',\n        isTag: false,\n        children: [\n          ['Language', profile?.language ?? ''],\n          ['Currency', profile?.currency ?? ''],\n        ],\n      },\n      {\n        title: 'Active Services',\n        isTag: true,\n        children: profile?.activeServices ?? [],\n      },\n    ],\n\n    clickHandler: logoutF,\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <ProfileContainer style={{ padding: '10px 40px 10px 40px' }}>\n        <FeatureAppLoader\n          featureAppId='fa-bayobab-profile-header'\n          src={src}\n          moduleType=''\n          config={{\n            profileData: profileContent,\n          }}\n          onError={(error: unknown): unknown => error}\n        >\n          {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n            return error ? (\n              <Col\n                style={{\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n              >\n                <ErrorUi productName={'Profile-header'} />\n              </Col>\n            ) : (\n              <Col\n                style={{\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n              >\n                {featureAppNode}\n              </Col>\n            );\n          }}\n        </FeatureAppLoader>\n      </ProfileContainer>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default Profile;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    width: 100%;\n    padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n      ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport {\n  Logout,\n  UserSymbol,\n  Tick,\n  PlusWithCircle,\n  Settings,\n  UserGroup,\n} from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { FeatureAppContainer } from './QuickQuotesDashboard.styled';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nconst OverviewPage = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    helpMenu: process.env.REACT_APP_FA_HELP_MENU ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const QuickQuotesBannerData = {\n    state: 'QuickQuotes',\n    backgroundColor: 'white',\n    icon: process.env.REACT_APP_ASSETS_URL + 'Quick-Quotes/app-icon-quick-quotes.webp',\n    title: 'Get a Quote in seconds',\n    bodyText: `Need a quote fast?\\n\\nGet a commitment-free quote and explore Bayobab’s products to find what works for you and your business needs.`,\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + 'Quick-Quotes/overview-banner-image-1.webp',\n    subTitle: 'How it works',\n    navigateTo: 'quick-quotes/create-quote/add-product',\n    productCard: [\n      {\n        icon: <PlusWithCircle />,\n        label: 'Add Product',\n        description: 'Add the Bayobab product that suits your needs',\n      },\n      {\n        icon: <Settings />,\n        label: 'Customise Product',\n        description: 'Enter the details of your usage to see product costs',\n      },\n      {\n        icon: <Tick />,\n        label: 'All Set',\n        description: 'Submit your quote to get started once you’re ready',\n      },\n    ],\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Quick Quotes',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.banner || !urls.helpMenu ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-quick-quotes'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quick Quotes Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-quick-quotes-banner'\n                src={urls.banner}\n                moduleType=''\n                config={{ bannerData: QuickQuotesBannerData }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Banner'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-quick-quotes-help-menu'\n                src={urls.helpMenu}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default OverviewPage;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n      ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from './SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { listSavedQuotes } from '../../../../apis';\nimport { CORRELATION_ID } from '../../../../utils';\nimport Loading from '../../../../Loading/Loading';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const SavedQuotes = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [quotes, setQuotes] = useState<any>([]);\n  const [loadingNot, setLoadingNot] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoadingNot(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoadingNot(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoadingNot(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    table: process.env.REACT_APP_FA_DYNAMIC_TABLE ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Saved Quotes',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loadingNot, profile]\n  );\n\n  const handleClose = (): void => {\n    setLoading(true);\n  };\n\n  useEffect(() => {\n    if (!profile?.emailAddress) return;\n\n    const fetchQuotes = listSavedQuotes(CORRELATION_ID, profile?.emailAddress);\n    fetchQuotes\n      .then((response) => {\n        if (response.status === 200) {\n          setQuotes(response.data);\n        } else {\n          setQuotes([]);\n        }\n        setLoading(false);\n        return response;\n      })\n      .catch((error) => {\n        setQuotes([]);\n        return error;\n      });\n  }, [profile?.emailAddress, loading]);\n\n  if (loading) {\n    return (\n      <ThemeProvider mode='light' platform='bayobab'>\n        <Loading isLoading={true} />\n      </ThemeProvider>\n    );\n  }\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loadingNot && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-quick-quotes'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quick Quotes Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            {quotes && (\n              <FeatureAppContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-quick-quotes-saved-quotes'\n                  src={urls.table}\n                  moduleType=''\n                  config={{\n                    data: quotes,\n                    tableType: 'SavedQuotes',\n                    close: () => handleClose(),\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Saved Quotes Table'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FeatureAppContainer>\n            )}\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import { ListQuoteResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport async function listQuotes(correlationId: string, email: string): Promise<ListQuoteResponse> {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-list-quotes`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n    },\n    params: {\n      email,\n    },\n  });\n\n  return response.data;\n}\nexport async function listSavedQuotes(\n  correlationId: string,\n  emailAddress: string\n): Promise<ListQuoteResponse> {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-retrieve-quotes`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      notificationType: 'ListQuotes',\n      emailAddress,\n    },\n  });\n\n  return response.data;\n}\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    // padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n    //   ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\nexport const FeatureAppContainerFAQ = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const Wrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n`;\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n\n  @media only screen and (max-width: 768px) {\n    margin-bottom: 400px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    margin-bottom: 750px;\n  }\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const FaqHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n      padding-bottom: 30px;\n    `;\n  }}\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      ${typography['body-small-semibold']};\n    `;\n  }}\n`;\n","export const faqAccordionContent = [\n  {\n    title: 'How long is my quote valid?',\n    content:\n      'Your quote is valid for 30 days from the date it was generated. After that, the prices and terms may need to be updated to reflect current market conditions or service availability.',\n  },\n  {\n    title: 'Is the price in the quote final?',\n    content:\n      'No, the price provided is an estimate based on the information you have supplied. The final cost may change once all project requirements are confirmed and any negotiations are completed. We will notify you before making any adjustments to the quoted price.',\n  },\n  {\n    title: 'How do I proceed after receiving my quote?',\n    content:\n      'Once your quote is generated, an account manager will reach out to you to discuss the next steps. You can also contact us directly if you would like to proceed or make any changes.',\n  },\n  {\n    title: 'What happens if my requirements change after I’ve received the quote?',\n    content:\n      'If your requirements change, the quote may need to be updated. Simply contact your account manager with the new details, and we will adjust the quote accordingly.',\n  },\n  {\n    title: 'Are there any hidden fees or additional costs?',\n    content:\n      'The quote is based on the information provided and covers the services requested. However, additional costs may arise due to changes in project scope, taxes, regulatory fees, or unforeseen technical requirements. Any changes will be communicated to you in advance.',\n  },\n  {\n    title: 'Can I get a quote for a non-standard solution?',\n    content:\n      'Yes, we offer quotes for both standard and non-standard solutions. If your requirements include specialised services (e.g., Dark Fibre, IPLC), you can request a customised quote through the platform.',\n  },\n  {\n    title: 'How long does it take to receive my quote?',\n    content:\n      'Quick quotes are generated instantly based on the information you provide. However, for more complex or non-standard solutions, it may take a little longer for your quote to be finalised.',\n  },\n  {\n    title: 'Who can I contact if I have questions about my quote?',\n    content:\n      'Once your quote is generated, an account manager will be assigned to you and will contact you shortly. You can also reach out to our support team for any questions related to your quote.',\n  },\n  {\n    title: 'Will my quote include installation or setup costs?',\n    content:\n      'Depending on the services requested, installation and setup costs may or may not be included in the quote. If they are not explicitly mentioned, these costs will be discussed during your consultation with the account manager.',\n  },\n  {\n    title: 'Can I make changes to my quote after it has been generated?',\n    content:\n      'Yes, if you need to make changes, simply notify your account manager, and we will update the quote accordingly to reflect your new requirements.',\n  },\n];\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Container = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-3xlarge']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 8px;\n    align-self: stretch;\n\n    border-radius: 24px;\n    background: #fff;\n    /* background-color: ${theme.colors['page-bg-colour-full']}; */\n  `}\n`;\n\nexport const Content = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-medium']};\n    align-self: stretch;\n  `}\n`;\n\nexport const Title = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    flex: 1 0 0;\n    color: ${theme.colors['text-embed-text-colour']};\n    ${theme.typography['title-small-bold']};\n  `}\n`;\n","import React from 'react';\nimport { Container, Content, Title } from './ImportantInfo.styled';\nimport { TextLink } from '@mtnkente/paragon-buttons';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { navigationService } from '../../../../..';\n\nconst ImportantInfo = (): JSX.Element => {\n  const clickHandler = (): void => {\n    navigationService?.navigateTo('/quick-quotes/terms-and-conditions');\n  };\n\n  return (\n    <ThemeProvider platform='bayobab' mode='light'>\n      <Container>\n        <Content>\n          <Title>Important Information</Title>\n          <TextLink\n            $size='small'\n            label='View our Terms and Conditions.'\n            onClick={clickHandler}\n            href={'javascript:void(0)'}\n          />\n        </Content>\n      </Container>\n    </ThemeProvider>\n  );\n};\n\nexport default ImportantInfo;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  FeatureAppContainerFAQ,\n  Wrapper,\n} from './QuickQuoteSupportTicket.styled';\nimport { HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Accordion, AccordionItem } from '@mtnkente/paragon-display';\nimport { AccordionWrap, FaqHeader } from '../../whatsappBsp/SupportAndFaqs/SupportAndFaqs.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { faqAccordionContent } from './faq.config';\nimport ImportantInfo from './ImportantInfo';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst QuickQuoteSupportTicket = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    helpMenu: process.env.REACT_APP_FA_HELP_MENU ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Support & FAQs',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.helpMenu ? (\n        <Loading isLoading={true} />\n      ) : (\n        <Wrapper data-testid='quick-quote-support-ticket-app-container'>\n          <div>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='Quick Quote FAQ Header'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'latency matrix Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-quick-quotes-help-menu'\n                src={urls.helpMenu}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n            <FeatureAppContainerFAQ>\n              <AccordionWrap>\n                <FaqHeader>Frequently Asked Questions</FaqHeader>\n                {faqAccordionContent.map((item, index) => (\n                  <Accordion key={index}>\n                    <AccordionItem title={item.title} value={`item-${index}`}>\n                      {item.content}\n                    </AccordionItem>\n                  </Accordion>\n                ))}\n              </AccordionWrap>\n            </FeatureAppContainerFAQ>\n\n            <FeatureAppContainer>\n              <ImportantInfo />\n            </FeatureAppContainer>\n          </div>\n        </Wrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default QuickQuoteSupportTicket;\n","import styled from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const ProductListContainer = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['margin-xlarge']};\n      flex: 1 0 0;\n      padding: 32px;\n      border-radius: 24px;\n      background: rgb(255, 255, 255);\n    `;\n  }};\n`;\n\nexport const TitleAndBodyText = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['margin-xsmall']};\n      align-self: stretch;\n    `;\n  }};\n`;\n\nexport const TitleWrap = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n`;\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n    `;\n  }};\n`;\n\nexport const CaptionWrap = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n  flex: 1 0 0;\n`;\n\nexport const Caption = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['caption-regular']};\n    `;\n  }};\n`;\n\nexport const SummaryContainer = styled.div`\n  @media (max-width: 768px) {\n    display: none;\n  }\n`;\n\nexport const ContainerWrapper = styled.div`\n  display: grid;\n  grid-template-columns: 2fr 1fr;\n  gap: 1.5rem;\n\n  @media (max-width: 768px) {\n    grid-template-columns: 1fr;\n  }\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from './DetailsTable.style';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { ContainerWrapper } from '../ProductList/ProductList.style';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nexport const DetailsTable = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    table: process.env.REACT_APP_FA_DYNAMIC_TABLE ?? '',\n    summary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Quote Details',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      redirectUrl: '/quick-quotes/saved-quotes',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.table || !urls.summary ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-app-container' style={{ padding: '10px' }}>\n            <div data-testid='dashboard-shell-container'>\n              <HeaderWrapper>\n                {!loading && (\n                  <FeatureAppLoader\n                    featureAppId='fa-header-quick-quotes-details'\n                    src={urls.header}\n                    moduleType=''\n                    config={HeaderData}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Quick Quotes Header'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                )}\n              </HeaderWrapper>\n\n              <ContainerWrapper>\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-quick-quotes-details-quotes'\n                    src={urls.table}\n                    moduleType=''\n                    config={{\n                      data: [],\n                      quoteDetails: true,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Saved Quotes Table'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-quote-summary'\n                    src={urls.summary}\n                    moduleType=''\n                    config={{\n                      state: 'selected',\n                      buttonVisibility: false,\n                      dataSets: [],\n                      emailScreen: false,\n                      currentUrl: 'saved-quote',\n                      request: false,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Quote Summary'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              </ContainerWrapper>\n            </div>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\n\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\nimport {\n  DashboardWrapper,\n  DisclaimerContainer,\n  DisclaimerHeader,\n  DisclaimerText,\n} from './LatencyMatrix.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol, Notification } from '@mtnkente/paragon-icons';\nimport { CustomerProfile } from '../../../models';\nimport { editNotification } from '../../../apis/edit-notification';\nimport { getNotification } from '../../../apis/get-notification';\nimport { MappedNotification } from '../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst Disclaimer = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [src, setSrc] = useState<string | null>(null);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(process.env.REACT_APP_FA_HEADER_URL + 'fa-main/asset-manifest.json', {\n        cache: 'no-cache',\n      });\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_HEADER_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  const HeaderData = {\n    username: 'Michelle',\n    fullName: profile?.fullName,\n    emailAddress: profile?.emailAddress,\n    companyDetails: profile?.companyDetails?.name,\n    isSupueruser: isSupueruser,\n    img: user?.picture,\n    themeMode: 'light',\n    myProfileText: 'My Profile',\n    logoutText: 'Logout',\n    viewType: 'overview',\n    upcomingServicesText: '',\n    supportTicketText: '',\n    feedbackText: '',\n    overviewText: 'latency matrix',\n    title: 'Post Login',\n    ThemeProvider: 'theme',\n    imgProfileRailMenuItems: [\n      {\n        id: '1',\n        label: 'View Profile',\n        icon: <UserSymbol />,\n        redirectUrl: '/profile',\n        activeTab: '',\n      },\n      {\n        id: '2',\n        label: 'Notification Preferences',\n        icon: <Notification />,\n        redirectUrl: '/notification',\n        activeTab: '',\n      },\n    ],\n    company: [\n      {\n        id: '1',\n        label: 'User Management',\n        icon: <UserGroup />,\n        redirectUrl: '/user-management',\n        activeTab: '',\n      },\n    ],\n    logOutState: [\n      {\n        id: '1',\n        label: 'Logout',\n        icon: <Logout />,\n        redirectUrl: '/',\n        activeTab: '',\n      },\n    ],\n    alertStatus: checkUnreadNotifications(notifications),\n\n    notifications: {\n      type: 'notifications-centre',\n      handleDelete: (): void => {},\n      handleUpdate: (): void => {},\n      markallread: handleAllUpdate,\n      notifications: notifications,\n    },\n\n    login: logoutF,\n  };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper>\n        {!loading && (\n          <FeatureAppLoader\n            featureAppId='latency matrix'\n            src={src}\n            moduleType=''\n            config={HeaderData}\n            onError={(error: unknown): unknown => error}\n          >\n            {({\n              error,\n              featureAppNode,\n              // loading,\n            }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    // display: loading ? 'none' : 'flex',\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'latency matrix Header'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    // display: loading ? 'none' : 'flex',\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        )}\n        <DisclaimerContainer>\n          <DisclaimerHeader>Intended for informational purposes only</DisclaimerHeader>\n          <DisclaimerText>\n            The latency matrix is intended for informational purposes only and without any\n            guarantees or warranties, either expressed or implied. Latency values can vary due to a\n            multitude of factors, including but not limited to network congestion, server load,\n            geographical location, and the underlying infrastructure. As such, the figures presented\n            may not be representative of real-time conditions. By accessing and using the latency\n            matrix, you acknowledge and accept these disclaimers.\n          </DisclaimerText>\n        </DisclaimerContainer>\n      </DashboardWrapper>\n    </ThemeProvider>\n  );\n};\n\nexport default Disclaimer;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst L2VpnIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='l2vpn-icon'\n  >\n    <g id='virtual-networks-l2-vpn'>\n      <path\n        id='Icon'\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M54.4241 17.888C57.3341 19.064 59.4461 21.548 60.1301 24.632L60.1241 24.626C61.2521 29.732 58.0181 34.808 52.9121 35.936L52.8641 35.948C51.8501 36.152 49.0001 36.296 45.2261 36.392C45.5021 35.768 45.7241 35.126 45.8981 34.466C49.1861 34.376 51.6221 34.25 52.4921 34.076C56.5781 33.17 59.1581 29.12 58.2581 25.046C57.6881 22.448 55.8341 20.378 53.3081 19.514L52.8041 19.34L52.6841 18.824C52.2041 16.712 50.8481 14.9 48.9641 13.85C46.6421 12.554 43.7621 12.572 41.4461 13.898L40.3661 14.516L40.0481 13.31C39.0581 9.542 35.6501 6.908 31.7561 6.908C28.0601 6.908 24.7961 9.266 23.6261 12.776L23.3141 13.718L22.3841 13.37C21.5081 13.046 20.6021 12.884 19.6961 12.884C18.4121 12.884 17.1341 13.208 15.9881 13.85C13.8101 15.062 12.3641 17.276 12.1121 19.766L12.0341 20.558L11.2421 20.624C8.02606 20.882 5.38606 23.39 4.96606 26.594C4.73206 28.418 5.21806 30.224 6.34006 31.682C7.46806 33.146 9.08806 34.076 10.9061 34.316C11.7401 34.406 14.2001 34.484 17.5361 34.538C17.7341 35.252 17.9741 35.888 18.2441 36.464C14.4761 36.41 11.6501 36.32 10.7081 36.212H10.6601C8.33206 35.906 6.26206 34.712 4.82806 32.846C3.39406 30.98 2.77006 28.676 3.07606 26.348C3.57406 22.514 6.56806 19.454 10.3241 18.818C10.8341 16.016 12.5681 13.574 15.0641 12.182C17.2361 10.97 19.7741 10.664 22.1561 11.294C23.8121 7.496 27.3881 5 31.7621 5C36.1361 5 40.0061 7.712 41.5421 11.72C44.2301 10.598 47.3381 10.748 49.9001 12.176C52.1021 13.406 53.7281 15.47 54.4241 17.888ZM53.5896 57.1275C54.9157 57.1222 56.0645 57.1176 56.7821 56.54C57.6281 55.862 58.0421 54.152 58.0421 51.68C58.0421 49.208 57.3581 48.482 56.8421 48.152C56.0621 47.654 54.8201 47.612 53.3981 47.612H49.4381C48.0461 47.612 46.6301 47.654 45.8501 48.152C45.3281 48.482 44.6441 49.106 44.6441 51.68C44.6441 54.254 45.0821 55.838 45.9761 56.528C46.7561 57.128 47.9621 57.134 49.3601 57.128H53.4761L53.5896 57.1275ZM38.3741 51.68C38.3741 49.208 37.6901 48.482 37.1741 48.152H37.1621C36.3821 47.654 35.1401 47.612 33.7181 47.612H29.7581C28.3661 47.612 26.9501 47.654 26.1701 48.152C25.6541 48.482 24.9641 49.106 24.9641 51.68C24.9641 54.254 25.4021 55.838 26.2961 56.528C27.0821 57.128 28.2821 57.134 29.6861 57.128H33.8021L33.9159 57.1275C35.2477 57.1222 36.3964 57.1176 37.1141 56.54C37.9601 55.862 38.3741 54.152 38.3741 51.68ZM18.7061 51.68C18.7061 49.208 18.0221 48.482 17.5061 48.152H17.4941C16.7141 47.654 15.4721 47.612 14.0501 47.612H10.0901C8.69806 47.612 7.28206 47.654 6.50206 48.152C5.98006 48.482 5.29606 49.106 5.29606 51.68C5.29606 54.254 5.73406 55.838 6.62806 56.528C7.41406 57.128 8.62006 57.134 10.0181 57.128H14.1341L14.2478 57.1275C15.5741 57.1222 16.7285 57.1176 17.4461 56.54C18.2921 55.862 18.7061 54.152 18.7061 51.68ZM53.3981 45.704C55.1261 45.704 56.6501 45.77 57.8681 46.544L57.8981 46.562C59.3201 47.474 59.9801 49.106 59.9801 51.704C59.9801 54.956 59.3561 56.972 58.0061 58.052C56.7461 59.06 55.0961 59.078 53.5001 59.06H49.3121C47.7341 59.06 46.1081 59.048 44.8301 58.064C43.4141 56.972 42.7541 54.95 42.7541 51.698C42.7541 49.1 43.4201 47.462 44.8421 46.556C46.0541 45.782 47.7161 45.716 49.4561 45.716H50.2601C49.9001 45.014 49.4201 44.474 48.8141 44.084C47.4864 43.2348 45.9144 43.1843 43.3138 43.1008L43.2881 43.1L42.6581 43.082C42.1781 43.07 37.5281 43.058 32.6501 43.058V45.722H33.7481C35.4761 45.722 37.0001 45.788 38.2181 46.562C39.6401 47.474 40.3001 49.106 40.3001 51.704C40.3001 54.956 39.6761 56.972 38.3261 58.052C37.0661 59.06 35.4161 59.078 33.8201 59.06H29.6321C28.0541 59.06 26.4281 59.048 25.1501 58.064C23.7341 56.972 23.0741 54.95 23.0741 51.698C23.0741 49.1 23.7401 47.462 25.1621 46.556C26.3741 45.782 28.0361 45.716 29.7761 45.716H30.7301V43.052C26.0141 43.052 21.5681 43.058 21.0041 43.076L20.5661 43.088C18.1001 43.154 15.9701 43.214 14.6081 44.084C14.0021 44.468 13.5221 45.014 13.1621 45.716H14.0741C15.8021 45.716 17.3261 45.782 18.5441 46.556C19.9661 47.468 20.6261 49.1 20.6261 51.698C20.6261 54.95 20.0021 56.966 18.6521 58.046C17.3921 59.054 15.7421 59.072 14.1461 59.054H9.95806C8.38006 59.054 6.75406 59.042 5.47606 58.058C4.06006 56.966 3.40006 54.944 3.40006 51.692C3.40006 49.094 4.06606 47.456 5.48806 46.55C6.70006 45.776 8.36206 45.71 10.1021 45.71H11.0681C11.5961 44.27 12.4181 43.202 13.5701 42.464C15.3821 41.306 17.7581 41.24 20.5061 41.168L20.9381 41.156C21.5561 41.138 26.0021 41.126 30.7181 41.126V38.834H28.8101C26.5661 38.852 24.2441 38.834 22.4801 37.478C20.5421 35.99 19.6421 33.17 19.6421 28.61C19.6421 25.016 20.5361 22.766 22.4621 21.536C23.3201 20.99 24.3641 20.702 25.5101 20.552C25.5821 21.206 25.7141 21.836 25.9061 22.43C24.9521 22.544 24.1121 22.76 23.4941 23.15C22.6601 23.678 21.5561 24.746 21.5561 28.616C21.5561 32.486 22.2401 34.892 23.6441 35.972C24.8778 36.9211 26.6569 36.926 28.7321 36.9318L28.8041 36.932H34.7561C36.8381 36.932 38.6321 36.932 39.8141 35.984C41.1461 34.916 41.7941 32.402 41.7941 28.616C41.7941 24.83 40.6901 23.684 39.8561 23.15C39.2141 22.736 38.3921 22.526 37.4501 22.418L37.4521 22.4116C36.8412 22.3459 36.1825 22.316 35.4821 22.304C35.7101 21.722 35.8661 21.08 35.9441 20.402C35.9801 20.084 36.0041 19.754 36.0041 19.418C36.0041 18.32 35.6201 17.942 35.0501 17.708C34.2701 17.39 33.0101 17.366 31.6781 17.366C30.3461 17.366 29.0861 17.39 28.3061 17.708C27.7361 17.942 27.3521 18.32 27.3521 19.418L27.3581 19.412C27.3581 19.748 27.3881 20.078 27.4241 20.402C26.7701 20.426 26.1281 20.468 25.5221 20.546C25.4801 20.174 25.4501 19.796 25.4501 19.412C25.4501 17.792 26.0921 16.67 27.3401 16.058V14.744C27.3401 12.68 29.0141 11 31.0781 11H32.2841C34.3481 11 36.0281 12.68 36.0281 14.744V16.058C37.2761 16.67 37.9181 17.792 37.9181 19.412C37.9181 19.796 37.8881 20.168 37.8461 20.534L37.8453 20.5407C38.9772 20.6849 40.0014 20.9729 40.8881 21.536H40.8941C42.8201 22.76 43.7141 25.01 43.7141 28.61C43.7141 33.176 42.8561 35.99 41.0141 37.466C39.3281 38.816 37.1681 38.834 34.8701 38.834H32.6321V41.126C37.5161 41.126 42.1781 41.138 42.7061 41.156L43.3301 41.174C46.0721 41.258 48.0521 41.324 49.8281 42.458C50.9801 43.196 51.8021 44.264 52.3241 45.704H53.3981ZM25.9118 22.4293C25.7199 21.8355 25.588 21.2057 25.5161 20.552C26.1221 20.468 26.7641 20.426 27.4181 20.408C27.4961 21.086 27.6521 21.728 27.8801 22.31L27.8861 22.31C27.8841 22.31 27.8821 22.3101 27.8801 22.3101C28.6121 24.194 30.0401 25.472 31.6781 25.472L31.6721 25.478C33.3101 25.478 34.7441 24.194 35.4761 22.31C36.1781 22.316 36.8381 22.346 37.4501 22.418C36.5201 25.328 34.2821 27.386 31.6781 27.386C29.0741 27.386 26.8361 25.334 25.9061 22.43C25.908 22.4298 25.9099 22.4295 25.9118 22.4293ZM29.4821 33.428H31.1741V34.43H28.1861V29.126H29.4821V33.428ZM33.0221 32.198C32.7341 32.462 32.3441 32.798 31.8521 33.206V33.2C31.8641 33.188 31.7861 33.248 31.6181 33.386V34.346H35.4101V33.296H33.3701C33.9401 32.858 34.4081 32.408 34.7741 31.946C35.1401 31.484 35.3261 30.986 35.3261 30.446C35.3261 29.954 35.1761 29.552 34.8701 29.246C34.5641 28.94 34.1141 28.784 33.5141 28.784C33.1661 28.784 32.8481 28.85 32.5661 28.988C32.2781 29.126 32.0501 29.336 31.8761 29.624C31.7021 29.912 31.6121 30.272 31.6001 30.698H32.8481C32.8481 30.44 32.9021 30.236 33.0101 30.092C33.1181 29.948 33.2681 29.876 33.4601 29.876C33.6521 29.876 33.7961 29.936 33.8921 30.05C33.9881 30.17 34.0361 30.326 34.0361 30.536C34.0361 30.812 33.9401 31.088 33.7421 31.376C33.5501 31.664 33.3041 31.934 33.0221 32.198ZM32.6261 23.006C31.7501 23.534 30.6101 23.246 30.0881 22.37H30.0941C30.0799 22.3512 30.0658 22.3176 30.0604 22.304H30.0581C29.7221 21.68 29.7821 20.948 30.1541 20.39H33.2081C33.217 20.405 33.2275 20.4185 33.238 20.432L33.2381 20.432L33.2381 20.432C33.2486 20.4455 33.2591 20.459 33.2681 20.474V20.48C33.6161 21.056 33.6041 21.752 33.3041 22.304H33.2947C33.1389 22.5835 32.918 22.8273 32.6261 23.006ZM30.7301 19.832C30.4901 19.976 30.2981 20.168 30.1481 20.384H33.2021C32.6561 19.58 31.5761 19.322 30.7301 19.832ZM31.0721 12.92C30.0641 12.92 29.2421 13.742 29.2421 14.75H29.2361V15.56C29.9801 15.476 30.7961 15.464 31.6721 15.464C32.5481 15.464 33.3641 15.476 34.1081 15.56V14.75C34.1081 13.742 33.2861 12.92 32.2781 12.92H31.0721Z'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default L2VpnIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst IpTransitIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='ip-transit-icon'\n  >\n    <g id='transit-ipt'>\n      <path\n        id='Icon'\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M33.102 5.876C32.838 5.36 32.316 5 31.698 5C30.822 5 30.114 5.72 30.114 6.614C30.114 7.508 30.822 8.228 31.698 8.228C32.28 8.228 32.778 7.904 33.054 7.43C45.756 8.15 55.872 18.89 55.872 31.994C55.872 40.046 51.99 47.6 45.492 52.202C45.144 52.448 45.06 52.928 45.3 53.282C45.45 53.498 45.684 53.612 45.924 53.612C46.074 53.612 46.224 53.564 46.356 53.474C53.268 48.578 57.39 40.55 57.39 31.994C57.39 18.05 46.614 6.62 33.09 5.876H33.102ZM32.145 55.766C31.5583 55.7671 31.0555 56.0968 30.78 56.576C17.874 56.078 7.524 45.248 7.524 31.994C7.524 24.458 10.854 17.432 16.656 12.734C16.986 12.47 17.04 11.978 16.776 11.648C16.512 11.312 16.032 11.258 15.708 11.522C9.54 16.514 6 23.978 6 31.994C6 46.094 17.022 57.614 30.75 58.13C31.014 58.64 31.536 58.994 32.142 58.994C33.018 58.994 33.726 58.274 33.726 57.38C33.726 56.487 33.0196 55.7677 32.145 55.766ZM38.832 17.9C39.192 19.16 39.498 20.546 39.75 22.034C41.676 21.824 43.452 21.542 45.006 21.194C46.08 20.954 46.98 20.696 47.748 20.414C45.018 16.502 40.944 13.634 36.222 12.5C37.284 13.718 38.136 15.494 38.832 17.9ZM47.748 43.568C46.986 43.292 46.08 43.034 45.012 42.794H45.006C43.452 42.44 41.676 42.158 39.75 41.954C39.498 43.448 39.192 44.852 38.826 46.112C38.142 48.5 37.296 50.264 36.252 51.476C40.968 50.336 45.024 47.468 47.748 43.568ZM31.728 52.004H31.752L31.758 52.01C34.458 51.998 36.09 50.162 37.38 45.686C37.716 44.51 38.004 43.208 38.244 41.816C36.18 41.642 33.978 41.552 31.71 41.552C29.442 41.552 27.234 41.642 25.17 41.816C25.404 43.208 25.698 44.504 26.034 45.68C27.33 50.174 28.968 52.004 31.68 52.004H31.728ZM18.408 42.794C17.328 43.034 16.434 43.292 15.66 43.574L15.666 43.58C18.39 47.48 22.452 50.342 27.162 51.482C26.112 50.27 25.272 48.506 24.582 46.118C24.216 44.852 23.91 43.454 23.658 41.96C21.732 42.164 19.962 42.446 18.408 42.794ZM15.66 20.42C16.428 20.702 17.328 20.96 18.402 21.2L18.408 21.194C19.956 21.548 21.738 21.83 23.664 22.034C23.916 20.546 24.222 19.154 24.582 17.9C25.272 15.494 26.124 13.718 27.186 12.506C22.458 13.64 18.39 16.514 15.66 20.42ZM38.478 40.274C38.796 37.946 38.976 35.402 39.006 32.768H24.408C24.438 35.402 24.618 37.946 24.936 40.274C27.078 40.094 29.364 39.998 31.71 39.998C34.056 39.998 36.336 40.094 38.478 40.274ZM24.936 23.714C24.612 26.042 24.432 28.586 24.402 31.22H24.408H39.006C38.97 28.586 38.79 26.042 38.472 23.714C36.336 23.894 34.05 23.99 31.704 23.99C29.358 23.99 27.072 23.894 24.936 23.714ZM31.686 12.014H31.656V12.008C28.956 12.02 27.324 13.856 26.034 18.332C25.698 19.502 25.41 20.792 25.176 22.178C27.234 22.352 29.436 22.442 31.704 22.442C33.972 22.442 36.174 22.352 38.238 22.178C38.004 20.792 37.716 19.502 37.38 18.338C36.084 13.844 34.446 12.014 31.734 12.014H31.686ZM48.588 21.734C48.546 21.764 48.498 21.794 48.444 21.812H48.462C47.592 22.142 46.572 22.436 45.348 22.712C43.764 23.072 41.952 23.36 39.996 23.57C40.32 25.952 40.506 28.544 40.536 31.22H50.19C50.46 30.686 51.006 30.314 51.642 30.314C52.554 30.314 53.292 31.064 53.292 31.988C53.292 32.912 52.554 33.662 51.642 33.662C51.006 33.662 50.466 33.302 50.19 32.768H40.53C40.5 35.444 40.32 38.036 39.996 40.418C41.952 40.634 43.764 40.916 45.348 41.276C46.638 41.57 47.712 41.882 48.612 42.236C49.722 40.34 50.538 38.24 50.988 36.008C51.198 36.044 51.414 36.068 51.636 36.068C51.942 36.068 52.242 36.026 52.53 35.96C50.694 45.962 42.06 53.552 31.71 53.552C21.36 53.552 12.726 45.956 10.89 35.96C11.178 36.032 11.478 36.068 11.784 36.068C12.006 36.068 12.222 36.044 12.432 36.008C12.882 38.246 13.704 40.352 14.82 42.254C14.868 42.224 14.916 42.194 14.97 42.176C15.84 41.846 16.86 41.552 18.084 41.276C19.668 40.916 21.474 40.628 23.43 40.418C23.112 38.036 22.926 35.444 22.896 32.768H13.236C12.954 33.296 12.414 33.662 11.784 33.662C10.872 33.662 10.134 32.912 10.134 31.988C10.134 31.064 10.872 30.314 11.784 30.314C12.414 30.314 12.96 30.686 13.236 31.22H22.89C22.92 28.544 23.1 25.952 23.424 23.57C21.468 23.36 19.656 23.072 18.072 22.712C16.782 22.424 15.714 22.106 14.808 21.752C13.698 23.642 12.882 25.736 12.432 27.968C12.222 27.932 12.006 27.908 11.784 27.908C11.472 27.908 11.178 27.95 10.89 28.016C12.726 18.02 21.348 10.436 31.698 10.436C42.048 10.436 50.676 18.026 52.518 28.016C52.23 27.944 51.93 27.908 51.624 27.908C51.402 27.908 51.186 27.932 50.976 27.968C50.526 25.73 49.704 23.63 48.588 21.734Z'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default IpTransitIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst DiaIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='dia-icon'\n  >\n    <g id='International-access-dia'>\n      <path\n        id='Icon'\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M63.7403 26.8949C62.9837 23.4664 60.6192 20.7 57.3681 19.4055C56.6055 16.7041 54.7967 14.3987 52.3436 13.0273C49.4708 11.4254 45.9773 11.2776 42.9744 12.5722C41.3016 8.06197 36.9746 5 32.0861 5C27.1976 5 23.2076 7.80779 21.3988 12.0756C18.7269 11.3427 15.8778 11.6737 13.4483 13.0332C10.6582 14.5879 8.7312 17.3306 8.18738 20.4635C3.99047 21.1433 0.638853 24.5422 0.0832054 28.8101C-0.614309 34.1301 3.15109 39.0245 8.47112 39.722H8.5184C9.34596 39.8166 10.1735 39.8757 10.9952 39.9112C10.9952 39.2728 11.0306 38.6344 11.0838 38.0137C10.2977 37.9783 9.51148 37.9251 8.71347 37.8364C4.43381 37.2748 1.4073 33.338 1.96295 29.0583C2.44175 25.4171 5.4387 22.562 9.0977 22.2724L9.88979 22.2073L9.96663 21.4212C10.2504 18.5897 11.8996 16.0775 14.3704 14.7002C16.5871 13.4588 19.2353 13.2638 21.6293 14.1564L22.5515 14.4992L22.8647 13.5652C24.1888 9.58705 27.8951 6.9093 32.0861 6.9093C36.5017 6.9093 40.3676 9.89443 41.4848 14.1682L41.7981 15.3681L42.874 14.7534C45.5044 13.252 48.7792 13.2283 51.4156 14.7002C53.5554 15.8942 55.0923 17.9513 55.642 20.3453L55.7603 20.8596L56.2627 21.031C59.1296 22.0123 61.234 24.3649 61.8842 27.3086C62.9068 31.9371 59.9749 36.5359 55.3346 37.5645C54.5189 37.73 53.7091 37.8541 52.9052 37.9664C52.9643 38.593 52.9938 39.2314 52.9997 39.8757C53.8982 39.7575 54.8026 39.6156 55.713 39.4324L55.7662 39.4206C61.4172 38.1674 64.9994 32.5518 63.7521 26.9008L63.7403 26.8949ZM31.9975 56.3205C22.9475 56.3205 15.5881 48.9612 15.5881 39.9112C15.5881 30.8612 22.9475 23.5019 31.9975 23.5019C41.0474 23.5019 48.4068 30.8672 48.4068 39.9112C48.4068 48.9552 41.0474 56.3205 31.9975 56.3205ZM31.9975 21.5985C21.9012 21.5985 13.6847 29.815 13.6847 39.9112C13.6847 50.0074 21.9012 58.2239 31.9975 58.2239C42.0937 58.2239 50.3102 50.0074 50.3102 39.9112C50.3102 29.815 42.0937 21.5985 31.9975 21.5985ZM18.9043 40.2777C18.9043 33.0661 24.774 27.1963 31.9856 27.1963L32.0034 27.1904C36.75 27.1904 40.9115 29.7322 43.205 33.5272L44.1921 33.0602C44.665 32.8356 45.2325 33.0365 45.4571 33.5094C45.6818 33.9823 45.4808 34.5498 45.0079 34.7744L44.068 35.2237C44.7241 36.7783 45.0847 38.4866 45.0847 40.2777C45.0847 40.8038 44.6591 41.2294 44.133 41.2294C43.6069 41.2294 43.1813 40.8038 43.1813 40.2777C43.1813 38.7763 42.8858 37.3458 42.3479 36.0394L40.3085 37.0088C40.7105 38.0255 40.9351 39.125 40.9351 40.2777C40.9351 40.8038 40.5095 41.2294 39.9834 41.2294C39.4573 41.2294 39.0317 40.8038 39.0317 40.2777C39.0317 39.4147 38.8662 38.593 38.5825 37.8305L33.7531 40.124C33.6467 40.9929 32.9137 41.6727 32.0093 41.6727C31.0339 41.6727 30.2418 40.8806 30.2418 39.9053C30.2418 38.93 31.0339 38.1379 32.0093 38.1379C32.3521 38.1379 32.6654 38.2383 32.9373 38.4098L37.684 36.1517C36.4013 34.3961 34.3324 33.2434 31.9975 33.2434C28.1197 33.2434 24.9632 36.4 24.9632 40.2777C24.9632 40.8038 24.5376 41.2294 24.0115 41.2294C23.4854 41.2294 23.0598 40.8038 23.0598 40.2777C23.0598 35.3537 27.0676 31.346 31.9915 31.346C35.089 31.346 37.8199 32.9242 39.4219 35.3242L41.4671 34.3488C39.4869 31.1923 35.9816 29.0938 31.9915 29.0938C25.8203 29.0938 20.8077 34.1124 20.8077 40.2777C20.8077 40.8038 20.3821 41.2294 19.856 41.2294C19.3299 41.2294 18.9043 40.8038 18.9043 40.2777Z'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default DiaIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst L3VpnIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='l3vpn-icon'\n  >\n    <g id='virtual-networks-l3-vpn'>\n      <path\n        id='Icon'\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M56.8782 21.2892C60.0906 22.5619 62.4527 25.3298 63.1974 28.7034L63.2085 28.6978C63.8088 31.4045 63.3141 34.1834 61.8191 36.5288C60.324 38.8742 58.0064 40.4915 55.2997 41.0918L55.2497 41.1029C53.4323 41.4642 46.5573 41.6253 41.1106 41.6976H41.0383L41.0606 41.6309C41.2217 41.064 41.3329 40.4804 41.3885 39.8913V39.8413H41.4385C46.6573 39.7746 53.2322 39.619 54.894 39.291C57.1283 38.7964 59.0346 37.4625 60.2629 35.5339C61.4912 33.6054 61.9025 31.3155 61.4078 29.0924C60.7575 26.1634 58.6678 23.8291 55.8166 22.851L55.3275 22.6842L55.2108 22.184C54.6661 19.7997 53.1322 17.7544 51.0091 16.5706C48.3913 15.1089 45.14 15.1311 42.5223 16.6262L41.4718 17.2264L41.1662 16.0593C40.0546 11.8131 36.2141 8.8452 31.8234 8.8452C27.6606 8.8452 23.9813 11.5019 22.6641 15.459L22.3584 16.365L21.458 16.0315C20.4799 15.6647 19.4572 15.4813 18.4235 15.4813C16.9618 15.4813 15.5167 15.8592 14.2384 16.5706C11.7819 17.9434 10.1478 20.4389 9.8644 23.2511L9.78659 24.0181L9.0196 24.0792C5.37922 24.3738 2.39466 27.2139 1.92224 30.832C1.65547 32.894 2.20569 34.9337 3.47288 36.5844C4.74007 38.2351 6.57416 39.2966 8.63056 39.5634C9.93109 39.7023 14.9276 39.8246 21.986 39.8802H22.0361V39.9302C22.0861 40.5138 22.1972 41.1029 22.364 41.6754L22.3862 41.7421H22.314C15.1443 41.6865 9.82549 41.5586 8.43603 41.3975H8.38601C5.84052 41.064 3.57292 39.7523 2.00005 37.7126C0.432742 35.6673 -0.250872 33.1385 0.0825983 30.593C0.632824 26.3913 3.93418 23.001 8.11924 22.3285C8.6639 19.1883 10.5591 16.5039 13.3325 14.9588C15.7501 13.6138 18.5457 13.2804 21.2191 14.0196C23.0254 9.75669 27.0103 7 31.8123 7C36.6143 7 40.9438 10.0179 42.6056 14.5198C45.5958 13.2192 49.0694 13.386 51.8983 14.9644C54.316 16.3094 56.1279 18.6159 56.8782 21.2892ZM28.5887 15.7377L28.5665 13.9695C28.5554 12.9914 29.3446 12.1799 30.3228 12.1688L32.935 12.1354C33.9132 12.1243 34.7246 12.9135 34.7357 13.8917L34.758 15.6647C33.8298 15.5535 32.7905 15.548 31.6734 15.5591C30.5562 15.5702 29.5169 15.6035 28.5943 15.7369L28.5887 15.7377ZM36.442 16.0593C35.9362 15.8592 35.3693 15.7369 34.758 15.6647C35.3693 15.7425 35.9362 15.8592 36.442 16.0593ZM26.738 16.262L26.7102 13.9918C26.688 11.9854 28.2942 10.3347 30.3006 10.3125L32.9128 10.2791C34.9191 10.2569 36.5698 11.8631 36.592 13.8695L36.6198 16.1426L36.6254 16.1371C38.1149 16.7929 38.8874 18.0712 38.9097 19.9553C38.9667 24.7002 36.2126 28.6516 32.6293 29.2001V32.3048C34.6968 32.5549 36.5031 33.6165 37.737 35.1671L47.0352 31.9269C47.0185 31.8046 47.0074 31.6768 47.0074 31.5434C47.0074 29.8094 48.4136 28.4032 50.1476 28.4032C51.8817 28.4032 53.2878 29.8094 53.2878 31.5434C53.2878 33.2775 51.8817 34.6836 50.1476 34.6836C49.2083 34.6836 48.3747 34.2723 47.7966 33.622L38.7207 36.7845C39.1598 37.7515 39.4099 38.8186 39.4099 39.9469C39.4099 41.353 39.0264 42.6702 38.365 43.804L45.2289 50.9625C46.0904 50.5234 47.1408 50.4901 48.069 50.9625C49.6141 51.7462 50.2254 53.6414 49.4418 55.1865C48.6581 56.7315 46.7629 57.3485 45.2178 56.5592C43.6727 55.7756 43.0558 53.8804 43.845 52.3353L43.895 52.2519L37.2367 45.3046C35.8362 46.7497 33.8743 47.6556 31.7067 47.6556C29.5391 47.6556 27.5828 46.7552 26.1822 45.3102L19.5184 52.263L19.5684 52.3464C20.3576 53.8915 19.7407 55.7812 18.1956 56.5704C16.6505 57.3596 14.7608 56.7427 13.9716 55.1976C13.1824 53.6525 13.7993 51.7628 15.3444 50.9736C16.2726 50.5012 17.323 50.5401 18.1845 50.9736L25.0484 43.8096C24.387 42.6758 23.998 41.3586 23.998 39.9469C23.998 38.8297 24.2425 37.7738 24.6705 36.8122L15.6112 33.6554C15.0332 34.3057 14.1939 34.7169 13.2602 34.7169C11.5262 34.7169 10.12 33.3108 10.12 31.5768C10.12 29.8427 11.5262 28.4366 13.2602 28.4366C14.9943 28.4366 16.4004 29.8427 16.4004 31.5768C16.4004 31.7046 16.3893 31.8324 16.3726 31.9603L25.6487 35.1949C26.8769 33.6332 28.6999 32.5549 30.773 32.3048V29.1756C27.3134 28.5518 24.6093 24.7453 24.5538 20.1276C24.5316 18.2514 25.2688 16.9574 26.738 16.262ZM25.8487 39.958C25.8487 43.1871 28.472 45.8104 31.7011 45.8104C34.9302 45.8104 37.5535 43.1871 37.5535 39.958C37.5535 36.7289 34.9302 34.1056 31.7011 34.1056C28.472 34.1056 25.8487 36.7289 25.8487 39.958ZM32.118 37.3847C32.4403 37.1013 32.8794 36.9568 33.4352 36.9568C33.802 36.9568 34.1188 37.0234 34.38 37.1513C34.6412 37.2791 34.8413 37.4514 34.9747 37.6737C35.1081 37.896 35.1748 38.1406 35.1748 38.4129C35.1748 38.7353 35.0914 38.9965 34.9303 39.2021C34.7691 39.4022 34.5801 39.5411 34.3634 39.619V39.6468C34.6412 39.7412 34.8636 39.8913 35.0247 40.108C35.1859 40.3248 35.2693 40.6027 35.2693 40.9362C35.2693 41.2418 35.197 41.5086 35.0581 41.7421C34.9191 41.9755 34.7135 42.1589 34.4467 42.2867C34.1799 42.4201 33.8631 42.4868 33.4963 42.4868C32.9072 42.4868 32.4403 42.3423 32.0902 42.0533C31.7401 41.7643 31.5566 41.3308 31.5344 40.7472H32.7516C32.7516 40.964 32.8183 41.1307 32.935 41.2585C33.0517 41.3864 33.224 41.4475 33.4463 41.4475C33.6353 41.4475 33.7853 41.3919 33.8909 41.2808C33.9965 41.1696 34.0466 41.0251 34.0466 40.8417C34.0466 40.6083 33.9743 40.436 33.8242 40.3304C33.6742 40.2248 33.4352 40.1747 33.1073 40.1747H32.8739V39.1521H33.1073C33.3574 39.1521 33.5575 39.1076 33.7131 39.0243C33.8687 38.9409 33.9465 38.7853 33.9465 38.563C33.9465 38.3851 33.8965 38.2517 33.7965 38.1517C33.6964 38.0516 33.563 38.0072 33.3907 38.0072C33.2073 38.0072 33.0684 38.0628 32.9739 38.1739C32.885 38.2851 32.8294 38.424 32.8183 38.5908H31.59C31.6067 38.0683 31.779 37.6626 32.1013 37.3792L32.118 37.3847ZM29.4391 41.4697H31.0842V42.4423H28.183V37.2847H29.4391V41.4697ZM26.4045 20.1109C26.449 24.1737 28.8778 27.4473 31.8123 27.4139V27.4084C34.7468 27.375 37.0922 24.0403 37.0422 19.9776C37.0311 19.2328 36.8755 18.7493 36.6421 18.4214C36.4031 18.0879 36.0863 17.91 35.7584 17.7822C35.4749 17.6711 35.1414 17.5932 34.7746 17.5377C33.9132 17.4043 32.8572 17.3987 31.69 17.4154C30.5284 17.4321 29.4669 17.4599 28.611 17.6155C28.2497 17.6822 27.9163 17.7711 27.6328 17.8878C27.3049 18.0212 26.9937 18.2046 26.7658 18.5436C26.5379 18.8771 26.3934 19.3662 26.4045 20.1109ZM32.696 23.9459C31.8512 24.4683 30.7452 24.2015 30.2228 23.3567C29.7059 22.5119 29.9671 21.4059 30.8119 20.8835C31.6567 20.3666 32.7682 20.6278 33.2851 21.4726C33.8076 22.3174 33.5408 23.4234 32.696 23.9459Z'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default L3VpnIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst IplcIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='iplc-icon'\n  >\n    <g id='private-circuits-iplc'>\n      <path\n        id='Icon'\n        d='M48.2705 43.742C46.6445 42.854 44.6885 42.11 42.5045 41.552C43.0565 38.87 43.3685 35.888 43.4165 32.786H52.0925C51.9305 36.872 50.5385 40.646 48.2705 43.748M38.4725 50.912C39.5465 49.742 40.4465 48.17 41.2085 46.142C41.5625 45.194 41.8805 44.168 42.1565 43.076C44.0885 43.574 45.8225 44.216 47.2745 44.984C44.9525 47.678 41.9165 49.754 38.4725 50.906M32.9405 51.92V41.906C35.6585 41.954 38.2565 42.242 40.6205 42.728C40.3625 43.742 40.0685 44.702 39.7325 45.59C38.1605 49.784 36.1565 51.674 32.9405 51.92ZM32.9405 32.78H41.8385C41.7905 35.768 41.4965 38.63 40.9685 41.198C38.4905 40.682 35.7725 40.382 32.9405 40.328V32.78ZM32.9405 23.66C35.7725 23.612 38.4905 23.318 40.9685 22.796C41.4965 25.358 41.7905 28.22 41.8385 31.202H32.9405V23.654V23.66ZM32.9405 12.068C36.1565 12.314 38.1605 14.198 39.7325 18.398C40.0625 19.28 40.3565 20.24 40.6145 21.248C38.2385 21.746 35.6285 22.034 32.9405 22.082V12.068ZM47.2745 18.992C45.8285 19.754 44.0885 20.396 42.1505 20.894C41.8805 19.808 41.5625 18.788 41.2085 17.84C40.4465 15.812 39.5465 14.24 38.4665 13.07C41.9165 14.222 44.9465 16.298 47.2745 18.992ZM52.0925 31.178H51.6365V31.202H43.4165C43.3685 28.1 43.0565 25.118 42.5045 22.442C44.6885 21.884 46.6445 21.14 48.2705 20.246C50.5325 23.336 51.9245 27.104 52.0925 31.178ZM24.5705 45.59C24.2405 44.702 23.9405 43.748 23.6825 42.728C26.0645 42.236 28.6745 41.948 31.3625 41.906V51.92C28.1465 51.674 26.1425 49.79 24.5705 45.59ZM17.0165 44.978C18.4685 44.216 20.2085 43.574 22.1525 43.082C22.4285 44.168 22.7405 45.194 23.1005 46.148C23.8625 48.176 24.7625 49.754 25.8425 50.924C22.3865 49.766 19.3505 47.69 17.0225 44.984M12.2105 32.78H20.8865C20.9345 35.876 21.2465 38.852 21.7925 41.528C19.6085 42.086 17.6465 42.824 16.0145 43.718C13.7585 40.622 12.3665 36.86 12.2105 32.78ZM16.0205 20.264C17.6525 21.152 19.6085 21.89 21.7985 22.448C21.2465 25.124 20.9345 28.106 20.8925 31.208H12.6305V31.19H12.2165C12.3785 27.116 13.7705 23.36 16.0265 20.27M25.8305 13.07C24.7565 14.24 23.8565 15.812 23.0945 17.84C22.7345 18.794 22.4225 19.826 22.1465 20.918C20.2085 20.42 18.4745 19.784 17.0165 19.016C19.3445 16.31 22.3805 14.234 25.8365 13.076M31.3625 32.78V40.322C28.5365 40.364 25.8125 40.658 23.3285 41.174C22.8065 38.612 22.5065 35.756 22.4585 32.78H31.3565H31.3625ZM22.4645 31.202C22.5065 28.22 22.8065 25.358 23.3345 22.796C25.8185 23.312 28.5365 23.606 31.3625 23.654V31.202H22.4645ZM31.3625 12.068V22.082C28.6445 22.034 26.0465 21.752 23.6825 21.266C23.9405 20.246 24.2345 19.286 24.5705 18.392C26.1485 14.198 28.1465 12.308 31.3625 12.062M58.8245 30.92C58.2425 30.338 57.3005 30.338 56.7125 30.92C56.6345 30.998 56.5685 31.088 56.5085 31.184H53.6645C53.5025 26.804 52.0265 22.76 49.6205 19.424C49.6385 19.412 49.6565 19.4 49.6745 19.388L52.9505 17.252C53.0525 17.3 53.1545 17.336 53.2625 17.36C54.0665 17.528 54.8585 17.012 55.0265 16.208C55.1945 15.404 54.6785 14.612 53.8745 14.444C53.0705 14.276 52.2785 14.792 52.1105 15.596C52.0865 15.71 52.0805 15.824 52.0805 15.938L48.6425 18.182C44.8445 13.664 39.2345 10.718 32.9405 10.484V7.748C33.3605 7.484 33.6425 7.022 33.6425 6.488C33.6425 5.666 32.9765 5 32.1545 5C31.3325 5 30.6665 5.666 30.6665 6.488C30.6665 7.022 30.9485 7.484 31.3685 7.748V10.484C25.0625 10.712 19.4405 13.67 15.6485 18.2L12.1745 15.938C12.1745 15.824 12.1745 15.71 12.1445 15.596C11.9765 14.792 11.1845 14.276 10.3805 14.444C9.5765 14.612 9.0605 15.404 9.2285 16.208C9.3965 17.012 10.1885 17.528 10.9925 17.36C11.1065 17.336 11.2085 17.3 11.3105 17.252L14.5805 19.388C14.5805 19.388 14.6405 19.43 14.6705 19.448C12.2705 22.778 10.8065 26.822 10.6385 31.19H7.7585C7.6985 31.094 7.6325 31.004 7.5485 30.92C6.9665 30.338 6.0245 30.338 5.4365 30.92C4.8545 31.502 4.8545 32.444 5.4365 33.032C6.0185 33.614 6.9605 33.614 7.5485 33.032C7.6265 32.954 7.6925 32.864 7.7525 32.774H9.4385V32.792H10.6385C10.7945 37.172 12.2645 41.216 14.6705 44.552C14.6405 44.576 14.6045 44.594 14.5685 44.618L11.3045 46.748C11.2025 46.7 11.1005 46.664 10.9865 46.64C10.1825 46.472 9.3905 46.988 9.2225 47.792C9.0545 48.596 9.5705 49.388 10.3745 49.556C11.1785 49.724 11.9705 49.208 12.1385 48.404C12.1625 48.29 12.1685 48.176 12.1685 48.062L15.6425 45.794C19.4405 50.324 25.0565 53.282 31.3625 53.51V56.24C30.9425 56.504 30.6605 56.966 30.6605 57.5C30.6605 58.322 31.3265 58.988 32.1485 58.988C32.9705 58.988 33.6365 58.322 33.6365 57.5C33.6365 56.966 33.3545 56.504 32.9345 56.24V53.51C39.2285 53.282 44.8445 50.336 48.6365 45.818L52.0745 48.062C52.0745 48.176 52.0745 48.29 52.1045 48.404C52.2725 49.208 53.0645 49.724 53.8685 49.556C54.6725 49.388 55.1885 48.596 55.0205 47.792C54.8525 46.988 54.0605 46.472 53.2565 46.64C53.1485 46.664 53.0405 46.7 52.9445 46.748L49.6745 44.618C49.6745 44.618 49.6325 44.594 49.6145 44.582C52.0265 41.24 53.5025 37.184 53.6585 32.798H55.0865V32.774H56.4965C56.5565 32.87 56.6225 32.96 56.7065 33.044C57.2885 33.626 58.2305 33.626 58.8185 33.044C59.4065 32.462 59.4005 31.52 58.8185 30.932'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default IplcIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst DarkFibreIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='dark-fibre-icon'\n  >\n    <g id='fibre-capacity-dark-fibre'>\n      <path\n        id='Icon'\n        fillRule='evenodd'\n        clipRule='evenodd'\n        d='M30.786 8.43446V54.386C30.786 54.938 31.236 55.382 31.794 55.382C32.352 55.382 32.802 54.938 32.802 54.386V8.366C33.288 8.03 33.612 7.478 33.612 6.848C33.612 5.828 32.772 5 31.74 5C30.708 5 29.868 5.828 29.868 6.848C29.868 7.52354 30.2373 8.10973 30.786 8.43446ZM37.002 49.172C37.008 47.06 37.008 42.998 37.008 23.798C37.008 23.6592 37.0065 23.522 37.005 23.3855V23.3854V23.3852V23.3851C37.0035 23.2502 37.002 23.1161 37.002 22.982C36.972 21.002 36.942 18.95 38.526 17.138C39.084 16.502 39.516 16.058 39.864 15.74L39.8617 15.7243C39.8566 15.6889 39.852 15.6574 39.852 15.626C39.852 14.606 40.692 13.778 41.724 13.778C42.756 13.778 43.596 14.6 43.596 15.626C43.596 16.652 42.756 17.48 41.724 17.48C41.49 17.48 41.268 17.432 41.064 17.354C40.8 17.612 40.476 17.954 40.05 18.44C38.964 19.682 38.988 21.2 39.018 22.952C39.024 23.234 39.024 23.516 39.024 23.798C39.024 38.2161 39.0206 44.0976 39.0189 47.0273L39.0189 47.0559C39.0184 48.0117 39.018 48.6512 39.018 49.172V51.242C39.018 51.794 38.568 52.238 38.01 52.238C37.452 52.238 37.002 51.794 37.002 51.242V49.172ZM48.156 45.812C48.948 45.92 49.716 46.034 50.448 46.16V46.154C55.404 46.994 60.468 48.368 60.468 52.154C60.468 55.94 55.404 57.314 50.448 58.154C45.42 59.006 38.772 59.48 31.734 59.48C24.696 59.48 18.048 59.006 13.02 58.154C8.064 57.314 3 55.94 3 52.154C3 48.368 8.064 47 13.02 46.154C13.734 46.034 14.502 45.914 15.3 45.806L15.576 47.78C14.796 47.882 14.052 47.996 13.362 48.116C5.88 49.388 5.016 51.026 5.016 52.154C5.016 53.282 5.88 54.926 13.362 56.198C18.276 57.032 24.804 57.494 31.734 57.494C38.664 57.494 45.186 57.032 50.106 56.198C57.588 54.92 58.452 53.276 58.452 52.154C58.452 51.032 57.588 49.388 50.106 48.116C49.392 47.996 48.648 47.882 47.88 47.78L48.156 45.812ZM42.702 34.052V34.544V48.572V49.55C42.702 50.102 43.152 50.546 43.71 50.546C44.268 50.546 44.718 50.102 44.718 49.55V48.578V34.55V34.028C44.7 32.888 44.718 32.156 45.252 31.544C45.606 31.142 45.864 30.878 46.134 30.65C46.368 30.752 46.62 30.812 46.89 30.812C47.922 30.812 48.762 29.984 48.762 28.964C48.762 27.944 47.922 27.116 46.89 27.116C45.858 27.116 45.018 27.944 45.018 28.964V28.982C44.622 29.294 44.238 29.66 43.728 30.248C42.666 31.466 42.684 32.846 42.708 34.064L42.702 34.052ZM21.87 17.48C22.104 17.48 22.326 17.432 22.53 17.354C22.788 17.606 23.112 17.948 23.538 18.44C24.624 19.688 24.606 21.206 24.576 22.97C24.576 23.108 24.5745 23.246 24.573 23.384L24.573 23.3845C24.5715 23.5224 24.57 23.6602 24.57 23.798V51.242C24.57 51.794 25.02 52.238 25.578 52.238C26.136 52.238 26.586 51.794 26.586 51.242V23.798V23.7978C26.586 23.5338 26.586 23.2639 26.592 23C26.622 21.014 26.652 18.962 25.062 17.138C24.498 16.49 24.072 16.052 23.73 15.734C23.73 15.716 23.733 15.698 23.736 15.68C23.739 15.662 23.742 15.644 23.742 15.626C23.742 14.606 22.902 13.778 21.87 13.778C20.838 13.778 19.998 14.606 19.998 15.626C19.998 16.646 20.838 17.48 21.87 17.48ZM16.83 30.662C16.608 30.752 16.368 30.806 16.11 30.806H16.104C15.072 30.806 14.232 29.972 14.232 28.952C14.232 27.932 15.072 27.104 16.104 27.104C17.136 27.104 17.976 27.932 17.976 28.952C17.976 28.961 17.9745 28.9715 17.973 28.982C17.9715 28.9925 17.97 29.003 17.97 29.012C18.348 29.306 18.666 29.624 19.224 30.26C20.286 31.484 20.268 32.864 20.25 34.088V34.568V49.574C20.25 50.126 19.8 50.57 19.242 50.57C18.684 50.57 18.234 50.126 18.234 49.574V34.568V34.058C18.252 32.912 18.234 32.18 17.7 31.562C17.298 31.106 17.076 30.866 16.83 30.662Z'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default DarkFibreIcon;\n","import React from 'react';\nimport { IconProps } from '../types/types';\n\nconst NplcIcon = ({ fill }: IconProps): JSX.Element => (\n  <svg\n    width='64'\n    height='64'\n    viewBox='0 0 64 64'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    data-testid='icon'\n    aria-label='nplc-icon'\n  >\n    <g id='private-circuits-nplc'>\n      <path\n        id='Icon'\n        d='M49.9613 45.0909C48.1423 44.0934 45.9604 43.2772 43.5386 42.653C44.0133 40.3592 44.3281 37.8626 44.4668 35.2647C45.715 35.0247 46.7073 34.0858 47.038 32.8802H54.2129C54.0369 37.4359 52.4792 41.6395 49.956 45.0909M39.0416 53.098C40.2418 51.7964 41.2501 50.036 42.0982 47.7742C42.493 46.7179 42.8504 45.571 43.1545 44.3601C45.299 44.9149 47.23 45.6244 48.8624 46.4886C46.2752 49.5026 42.8877 51.8071 39.0416 53.0927M32.8802 54.2023V43.0478C35.9102 43.1011 38.8068 43.4159 41.4368 43.96C41.1487 45.0962 40.818 46.1631 40.4499 47.1554C38.6948 51.8284 36.4597 53.9249 32.8802 54.2023ZM23.5501 47.15C23.1767 46.1578 22.846 45.0909 22.5632 43.9547C25.2198 43.4052 28.1325 43.0905 31.1251 43.0425V54.2023C27.5403 53.9249 25.3105 51.8284 23.5555 47.15M15.1216 46.4672C16.7486 45.619 18.6904 44.9095 20.8455 44.3547C21.1496 45.5657 21.5017 46.7126 21.9018 47.7688C22.7499 50.036 23.7582 51.7911 24.9638 53.098C21.1069 51.8071 17.7142 49.4919 15.1216 46.4672ZM14.0227 45.0696C11.5101 41.6181 9.95777 37.4252 9.78173 32.8802H19.4479C19.4959 36.337 19.848 39.6604 20.4614 42.6477C18.0289 43.2665 15.8311 44.0827 14.0227 45.0642M14.0227 18.9304C15.8471 19.9226 18.0342 20.7388 20.4614 21.3576C19.848 24.345 19.5012 27.6684 19.4479 31.1198H9.78173C9.95777 26.5748 11.5101 22.3819 14.0227 18.9304ZM24.9584 10.9073C23.7582 12.2089 22.7499 13.9693 21.9018 16.2312C21.5017 17.2927 21.1496 18.4397 20.8455 19.6506C18.701 19.1011 16.7593 18.3916 15.1269 17.5328C17.7195 14.5134 21.1069 12.1983 24.9584 10.9073ZM31.1198 9.79773V20.9522C28.0951 20.8989 25.1985 20.5895 22.5579 20.0453C22.846 18.9091 23.1767 17.8369 23.5501 16.8446C25.3052 12.1716 27.5403 10.0751 31.1198 9.79773ZM40.4499 16.85C40.818 17.8369 41.1487 18.9038 41.4368 20.0347C38.7855 20.5841 35.8782 20.9042 32.8802 20.9575V9.79773C36.465 10.0698 38.6948 12.1716 40.4499 16.85ZM32.8802 32.8802H40.6206C40.9086 33.9311 41.6982 34.7739 42.717 35.1367C42.5784 37.6493 42.2796 40.0498 41.8262 42.2583C39.0629 41.6822 36.0329 41.3514 32.8749 41.2927V32.8802H32.8802ZM31.1198 32.8802V41.2874C27.9991 41.3354 24.9584 41.6715 22.1685 42.2476C21.5817 39.3883 21.2509 36.2036 21.1976 32.8749H31.1145L31.1198 32.8802ZM31.1198 31.1198H21.2029C21.2509 27.7964 21.587 24.6117 22.1685 21.7524C24.9371 22.3285 27.9671 22.6539 31.1198 22.7073V31.1145V31.1198ZM32.8802 22.7126C36.0009 22.6593 39.0469 22.3232 41.8262 21.7417C42.2796 23.9449 42.5784 26.3507 42.717 28.858C41.6928 29.2207 40.9033 30.0689 40.6206 31.1198H32.8802V22.7126ZM48.8571 17.5114C47.2354 18.365 45.2936 19.0798 43.1438 19.6346C42.8397 18.429 42.4877 17.2874 42.0929 16.2312C41.2447 13.964 40.2365 12.2089 39.0309 10.902C42.8771 12.1876 46.2645 14.4974 48.8571 17.5114ZM49.9667 18.9144C52.4899 22.3659 54.0422 26.5695 54.2236 31.1251H47.0487C46.7179 29.9089 45.7204 28.97 44.4721 28.7299C44.3281 26.132 44.0133 23.6408 43.5386 21.347C45.9711 20.7228 48.1583 19.9066 49.9667 18.9198M51.0389 17.4154C51.0229 17.3727 51.0069 17.3354 50.9802 17.2927C50.9162 17.186 50.8309 17.1007 50.7402 17.0313C46.3392 11.5315 39.575 8 32 8C31.9947 8 31.9893 8 31.9787 8C31.968 8 31.968 8 31.9627 8C31.9253 8 31.888 8 31.8506 8C18.685 8.08535 8 18.8184 8 32C8 45.1816 18.7651 56 32 56H32.0373C32.0747 56 32.112 56 32.1494 56C45.315 55.92 56 45.1869 56 32.0053C56 26.5214 54.1489 21.4643 51.0389 17.4208'\n        fill={fill}\n      />\n    </g>\n  </svg>\n);\n\nexport default NplcIcon;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport L2VpnIcon from '../icons/L2VpnIcon';\nimport IpTransitIcon from '../icons/IpTransitIcon';\nimport DiaIcon from '../icons/DiaIcon';\nimport { FeatureAppLoader, CustomFeatureAppRenderingParams } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport {\n  Caption,\n  CaptionWrap,\n  ProductListContainer,\n  Title,\n  TitleAndBodyText,\n  TitleWrap,\n} from './ProductList.style';\nimport L3VpnIcon from '../icons/L3VpnIcon';\nimport IplcIcon from '../icons/IplcIcon';\nimport DarkFibreIcon from '../icons/DarkFibreIcon';\nimport NplcIcon from '../icons/NplcIcon';\nimport { Divider } from '@mtnkente/paragon-layouts';\nimport { Add, Arrow } from '@mtnkente/paragon-icons';\nimport Loading from '../../../../Loading/Loading';\n\nexport const ProductList = (): JSX.Element => {\n  const [loading, setLoading] = useState(true);\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_PRODUCT_CARDS_URL + 'fa-main/asset-manifest.json',\n        { cache: 'no-cache' }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_PRODUCT_CARDS_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  const cardData = [\n    {\n      title: 'L2 VPN',\n      description:\n        'Connect globally with Bayobab’s L2 VPN solution. Bridge your business and facilitate connections with our strong Global MPLS network.',\n      icon: <L2VpnIcon />,\n      buttonLabel: 'Add',\n      buttonIcon: <Add />,\n      stateData: { state: 'empty', buttonVisibility: false, emailScreen: false, request: false },\n      route: 'quick-quotes/create-quote/customise-product/l2vpn',\n    },\n    {\n      title: 'DIA',\n      description:\n        'Get consistent, high-speed internet with our Dedicated Internet Access (DIA), free from fluctuations and interruptions',\n      icon: <DiaIcon />,\n      buttonLabel: 'Add',\n      buttonIcon: <Add />,\n      stateData: { state: 'empty', buttonVisibility: false, emailScreen: false, request: false },\n      route: 'quick-quotes/create-quote/customise-product/dia',\n    },\n  ];\n\n  const otherProductsCardData = [\n    {\n      title: 'L3 VPN',\n      description:\n        'Our L3 VPN is a commitment to optimal connectivity, with its next-gen MPLS network for swift, secure, and uninterrupted data routing.',\n      icon: <L3VpnIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/l3vpn',\n    },\n    {\n      title: 'IPLC',\n      description:\n        'Secure, robust international connectivity over vast terrestrial/ subsea networks for safe, efficient data transmission.',\n      icon: <IplcIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/iplc',\n    },\n    {\n      title: 'Dark Fibre',\n      description:\n        'Lease and customize your own secure, scalable fibre network. Total control for your data needs – your network, your rules.',\n      icon: <DarkFibreIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/dark-fibre',\n    },\n    {\n      title: 'NPLC',\n      description:\n        'Our NPLC offers a dedicated, secure highway for swift, uninterrupted inter-office connectivity, ensuring business efficiency.',\n      icon: <NplcIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/nplc',\n    },\n    {\n      title: 'Public Cloud Access',\n      description:\n        'Low-latency connections to cloud resources, Public Cloud Access offers a pathway to cloud solutions, providing fast access and scalability.',\n      icon: <L3VpnIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/public-cloud-access',\n    },\n    {\n      title: 'IP Transit',\n      description:\n        'Your gateway to the global web. Bayobab’s IPT Service provides an optimum pathway for your data to access the global internet.',\n      icon: <IpTransitIcon />,\n      buttonLabel: 'Request Quote',\n      buttonIcon: <Arrow />,\n      stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n      route: 'quick-quotes/create-quote/customise-product/ipt',\n    },\n  ];\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <ProductListContainer>\n        <FeatureAppLoader\n          featureAppId='fa-product-cards'\n          src={src}\n          moduleType=''\n          config={{ data: cardData }}\n          onError={(error: unknown): unknown => error}\n        >\n          {({\n            error,\n            featureAppNode,\n            loading: isFeatureAppLoading,\n          }: CustomFeatureAppRenderingParams): ReactElement => {\n            if (!isFeatureAppLoading && loading) {\n              setLoading(false);\n            }\n            return error ? (\n              <Col\n                style={{\n                  // display: loading ? 'none' : 'flex',\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                <ErrorUi productName={'Product Cards'} />\n              </Col>\n            ) : (\n              <Col\n                style={{\n                  // display: loading ? 'none' : 'flex',\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                {isFeatureAppLoading ? <Loading isLoading={true} /> : featureAppNode}\n              </Col>\n            );\n          }}\n        </FeatureAppLoader>\n        <Divider $variant={'on-surface-full'} />\n        {!loading && (\n          <TitleAndBodyText>\n            <TitleWrap>\n              <Title>Explore Our Other Products</Title>\n            </TitleWrap>\n            <CaptionWrap>\n              <Caption>\n                While we are currently unable to generate automatic quotes for the products listed\n                below, feel free to request a personalised quote from our account managers.\n              </Caption>\n            </CaptionWrap>\n          </TitleAndBodyText>\n        )}\n        <FeatureAppLoader\n          featureAppId='fa-other-product-cards'\n          src={src}\n          moduleType=''\n          config={{ data: otherProductsCardData }}\n          onError={(error: unknown): unknown => error}\n        >\n          {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n            return error ? (\n              <Col\n                style={{\n                  // display: loading ? 'none' : 'flex',\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                <ErrorUi productName={'Other Product Cards'} />\n              </Col>\n            ) : (\n              <Col\n                style={{\n                  // display: loading ? 'none' : 'flex',\n                  flex: '1',\n                  width: '100%',\n                  padding: '0px',\n                }}\n                $xs={0}\n              >\n                {featureAppNode}\n              </Col>\n            );\n          }}\n        </FeatureAppLoader>\n      </ProductListContainer>\n    </ThemeProvider>\n  );\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  DashboardWrapper,\n  HeaderWrapper,\n} from '../../customerportal/Dashboard/Dashboard.style';\n\nimport { Logout, UserSymbol } from '@mtnkente/paragon-icons';\nimport { ProductList } from './ProductList';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { ContainerWrapper, SummaryContainer } from './ProductList.style';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const ProductPage = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    quoteSummary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.header || !urls.quoteSummary) {\n    return <div />;\n  }\n\n  const HeaderData = {\n    username: 'Michelle',\n    fullName: profile?.fullName,\n    emailAddress: profile?.emailAddress,\n    companyDetails: profile?.companyDetails?.name,\n    isSupueruser: isSupueruser,\n    img: user?.picture,\n    themeMode: 'light',\n    myProfileText: 'My Profile',\n    logoutText: 'Logout',\n    viewType: 'overview',\n    upcomingServicesText: '',\n    supportTicketText: '',\n    feedbackText: '',\n    overviewText: 'Add product to quote',\n    title: 'Post Login',\n    ThemeProvider: 'theme',\n    imgProfileRailMenuItems: [\n      {\n        id: '1',\n        label: 'View Profile',\n        icon: <UserSymbol />,\n        redirectUrl: '/profile',\n        activeTab: '',\n      },\n      // {\n      //   id: '2',\n      //   label: 'Notification Preferences',\n      //   icon: <Notification />,\n      //   redirectUrl: '/notification',\n      //   activeTab: '',\n      // },\n    ],\n    // company: [\n    //   {\n    //     id: '1',\n    //     label: 'User Management',\n    //     icon: <UserGroup />,\n    //     redirectUrl: '/user-management',\n    //     activeTab: '',\n    //   },\n    // ],\n    logOutState: [\n      {\n        id: '1',\n        label: 'Logout',\n        icon: <Logout />,\n        redirectUrl: '/',\n        activeTab: '',\n      },\n    ],\n    alertStatus: checkUnreadNotifications(notifications),\n\n    notifications: {\n      type: 'notifications-centre',\n      handleDelete: (): void => {},\n      handleUpdate: (): void => {},\n      markallread: handleAllUpdate,\n      notifications: notifications,\n    },\n\n    login: logoutF,\n  };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n          <div>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-create-quote'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Create Quote Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <ContainerWrapper>\n              <FeatureAppContainer>\n                <ProductList />\n              </FeatureAppContainer>\n              <SummaryContainer>\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-quote'\n                    src={urls.quoteSummary}\n                    moduleType=''\n                    config={{\n                      state: 'empty',\n                      buttonVisibility: false,\n                      dataSets: [],\n                      emailScreen: false,\n                      currentUrl: 'quotes',\n                      request: false,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Quote'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              </SummaryContainer>\n            </ContainerWrapper>\n          </div>\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\n\n// Styled components\nconst ErrorWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  height: 100vh;\n  text-align: center;\n  background-color: #f8f8f8;\n`;\n\nconst ErrorTitle = styled.h1`\n  font-size: 72px;\n  margin: 0;\n  color: #ff4d4f;\n`;\n\nconst ErrorMessage = styled.p`\n  font-size: 24px;\n  color: #333;\n`;\n\nconst HomeLink = styled.a`\n  margin-top: 20px;\n  font-size: 18px;\n  color: #007bff;\n  text-decoration: underline;\n  cursor: pointer;\n\n  &:hover {\n    color: #0056b3;\n  }\n`;\n\nconst Error404: React.FC = () => {\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <ErrorWrapper>\n        <ErrorTitle>404</ErrorTitle>\n        <ErrorMessage>Oops! The page you&apos;re looking for doesn&apos;t exist.</ErrorMessage>\n        <HomeLink href='/'>Go back to Home</HomeLink>\n        <BayobabFonts />\n      </ErrorWrapper>\n    </ThemeProvider>\n  );\n};\n\nexport default Error404;\n","export const diaCountriesBandwidth = [\n  {\n    country: 'Algeria',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Angola',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Benin',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Botswana',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Burkina Faso',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Burundi',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Cape Verde',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Central African Republic',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Chad',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Congo B',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n    ],\n  },\n  {\n    country: 'Democratic Republic of Congo',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Djibouti',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Egypt',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Equatorial Guinea',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Eritrea',\n    bandwidths: ['1 Mbps'],\n  },\n  {\n    country: 'Ethiopia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'France',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Gabon',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Germany',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Ghana',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n    ],\n  },\n  {\n    country: 'Guinea Bissau',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n    ],\n  },\n  {\n    country: 'Ivory Coast',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Kenya',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Lesotho',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Liberia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n    ],\n  },\n  {\n    country: 'Madagascar',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Malawi',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Mali',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Mauritania',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Mauritius',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Morocco',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Mozambique',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n    ],\n  },\n  {\n    country: 'Namibia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Netherlands',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Niger',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Nigeria',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Portugal',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Rwanda',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Senegal',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Seychelles',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Sierra Leone',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Singapore',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'South Africa',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'South Sudan',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Sudan',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Swaziland',\n    bandwidths: [\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n    ],\n  },\n  {\n    country: 'Tanzania',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'The Gambia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Togo',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n    ],\n  },\n  {\n    country: 'Tunisia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Uganda',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'United Arab Emirates',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'United Kingdom',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Zambia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Zimbabwe',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n];\n","export const twoVpnCountriesBandwidth = [\n  {\n    country: 'Algeria',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Angola',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Benin',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Botswana',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '8 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Burkina Faso',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Burundi',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Cameroon',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Cape Verde',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Central African Republic',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n    ],\n  },\n  {\n    country: 'Chad',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Congo B',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n    ],\n  },\n  {\n    country: 'Democratic Republic of Congo',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Djibouti',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Egypt',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Equatorial Guinea',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Eritrea',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n    ],\n  },\n  {\n    country: 'Ethiopia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'France',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Gabon',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Germany',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Ghana',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Guinea Bissau',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n    ],\n  },\n  {\n    country: 'Guinea Conakry',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Ivory Coast',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Kenya',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Lesotho',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Liberia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n    ],\n  },\n  {\n    country: 'Madagascar',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Malawi',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n    ],\n  },\n  {\n    country: 'Mali',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Mauritania',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Mauritius',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Morocco',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n    ],\n  },\n  {\n    country: 'Mozambique',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Namibia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n    ],\n  },\n  {\n    country: 'Netherlands',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Niger',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Nigeria',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Portugal',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Rwanda',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n    ],\n  },\n  {\n    country: 'Senegal',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Seychelles',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Sierra Leone',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n    ],\n  },\n  {\n    country: 'Singapore',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'South Africa',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'South Sudan',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Spain',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Sudan',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Swaziland',\n    bandwidths: [\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n    ],\n  },\n  {\n    country: 'Tanzania',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'The Gambia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n    ],\n  },\n  {\n    country: 'Togo',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Tunisia',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'Uganda',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'United Arab Emirates',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n    ],\n  },\n  {\n    country: 'United Kingdom',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Zambia',\n    bandwidths: [\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n  {\n    country: 'Zimbabwe',\n    bandwidths: [\n      '1 Mbps',\n      '2 Mbps',\n      '3 Mbps',\n      '4 Mbps',\n      '5 Mbps',\n      '6 Mbps',\n      '7 Mbps',\n      '8 Mbps',\n      '9 Mbps',\n      '10 Mbps',\n      '15 Mbps',\n      '20 Mbps',\n      '30 Mbps',\n      '40 Mbps',\n      '50 Mbps',\n      '60 Mbps',\n      '70 Mbps',\n      '80 Mbps',\n      '90 Mbps',\n      '100 Mbps',\n      '150 Mbps',\n      '200 Mbps',\n      '300 Mbps',\n      '400 Mbps',\n      '500 Mbps',\n      '600 Mbps',\n      '620 Mbps',\n      '700 Mbps',\n      '800 Mbps',\n      '900 Mbps',\n      '1 Gbps',\n    ],\n  },\n];\n","import { diaCountriesBandwidth } from './DiaFormDataSets';\nimport { twoVpnCountriesBandwidth } from './L2vpnFormDataSets';\n\nexport const forms: formTypes = {\n  '/quick-quotes/create-quote/customise-product/dia': {\n    title: 'Customise your DIA',\n    introText: [],\n    formSections: [\n      {\n        title: 'Locations',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location',\n            name: 'country',\n            type: 'dropdown',\n            options: diaCountriesBandwidth.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n\n  '/quick-quotes/create-quote/customise-product/l2vpn': {\n    title: 'Customise your L2 VPN',\n    introText: [],\n    formSections: [\n      {\n        title: 'Locations',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location A',\n            name: 'country',\n            type: 'dropdown',\n            options: twoVpnCountriesBandwidth.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n          {\n            label: 'Select Location B',\n            name: 'countryDestination',\n            type: 'dropdown',\n            options: twoVpnCountriesBandwidth.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'l2capacity',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n};\n\ntype Field = {\n  label?: string;\n  name: string;\n  type: string;\n  options: any[];\n  isOptional: boolean;\n  dropdownSearch: boolean;\n  helperText?: string;\n};\n\ntype FormSection = {\n  title: string;\n  isAdjacent?: boolean;\n  fields: Field[];\n};\n\ntype FormData = {\n  [key: string]: string;\n};\n\ntype Form = {\n  title: string;\n  introText: string[];\n  formSections: FormSection[];\n  buttonLabel: string;\n  buttonStatus: boolean;\n  handleSubmit: (formData: FormData) => void;\n};\n\ntype FormKey =\n  | '/quick-quotes/create-quote/customise-product/dia'\n  // | '/quick-quotes/create-quote/customise-product/ipt'\n  | '/quick-quotes/create-quote/customise-product/l2vpn';\n\nexport type formTypes = {\n  [key in FormKey]: Form;\n};\n","export const iptBandwidths = [\n  {\n    country: 'Ghana',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'Ivory Coast',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'Kenya',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'Nigeria',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'South Africa',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'Uganda',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n  {\n    country: 'Zambia',\n    bandwidths: ['100 Mbps', '500 Mbps', '1 Gbps', '2.5 Gbps', '10 Gbps', '40 Gbps', '100 Gbps'],\n  },\n];\n","/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  DashboardWrapper,\n  HeaderWrapper,\n} from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { ContainerWrapper, ProductListContainer } from '../ProductList/ProductList.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { forms } from './ProductsConfigurations';\nimport { useLocation } from 'react-router-dom';\nimport { diaCountriesBandwidth } from './DiaFormDataSets';\nimport { iptBandwidths } from './IptFormDataSets';\nimport { twoVpnCountriesBandwidth } from './L2vpnFormDataSets';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const CustomiseProduct = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const location = useLocation();\n  const [currentUrl, setCurrentUrl] = useState<keyof typeof forms | undefined>(undefined);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n    quoteSummary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const retrievedProfile = sessionStorage.getItem('profile');\n\n  useEffect(() => {\n    setCurrentUrl(location.pathname.toString() as keyof typeof forms);\n  }, []);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Customise Product',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.connectForm || !urls.quoteSummary ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n            <div>\n              <HeaderWrapper>\n                {!loading && (\n                  <FeatureAppLoader\n                    featureAppId='fa-header-dashboard'\n                    src={urls.header}\n                    moduleType=''\n                    config={HeaderData}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Dashboard Header'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                )}\n              </HeaderWrapper>\n\n              <ContainerWrapper>\n                <FeatureAppContainer>\n                  <ProductListContainer>\n                    {currentUrl && retrievedProfile != null ? (\n                      <FeatureAppLoader\n                        featureAppId='fa-customise-product'\n                        src={urls.connectForm}\n                        moduleType=''\n                        config={{\n                          data: currentUrl ? forms[currentUrl] : undefined,\n                          additionalDataSets: {\n                            diaCountriesBandwidth,\n                            twoVpnCountriesBandwidth,\n                            iptBandwidths,\n                          },\n                          userInfo: JSON.parse(retrievedProfile),\n                          currentUrl: currentUrl,\n                        }}\n                        onError={(error: unknown): unknown => error}\n                      >\n                        {({\n                          error,\n                          featureAppNode,\n                        }: CustomFeatureAppRenderingParams): ReactElement => {\n                          return error ? (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              <ErrorUi productName={'Customise Product'} />\n                            </Col>\n                          ) : (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              {featureAppNode}\n                            </Col>\n                          );\n                        }}\n                      </FeatureAppLoader>\n                    ) : null}\n                  </ProductListContainer>\n                </FeatureAppContainer>\n\n                <FeatureAppContainer style={{ position: 'sticky', top: '0', alignSelf: 'start' }}>\n                  <FeatureAppLoader\n                    featureAppId='fa-quote-summary-card'\n                    src={urls.quoteSummary}\n                    moduleType=''\n                    config={{\n                      state: '',\n                      buttonVisibility: false,\n                      dataSets: [],\n                      emailScreen: false,\n                      currentUrl: 'quotes',\n                      request: false,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Quote'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              </ContainerWrapper>\n            </div>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","export const termsAndConditionsData = {\n  title: 'Quick Quotes terms and conditions',\n  sections: [\n    {\n      heading: 'Validity of Quote',\n      body: 'This quote is valid for 30 days from the date of generation. After this period, the prices and terms outlined may be subject to revision without notice.',\n    },\n    {\n      heading: 'Estimation',\n      body: 'The quote provided is an estimate based on the information available at the time of request. It is not a final or guaranteed price. Additional costs may be incurred based on changes to project scope, technical requirements, or other unforeseen factors.',\n    },\n    {\n      heading: 'Pricing Adjustments',\n      body: 'Prices in the quote are subject to final validation by our team and may vary based on updated service requirements, market conditions, or regulatory changes. Any price adjustments will be communicated and approved before proceeding.',\n    },\n    {\n      heading: 'Scope of Services',\n      body: 'The quote is based on the specific products and services selected. Changes to service type, scope, or location may result in additional costs or adjustments to the quote.',\n    },\n    {\n      heading: 'Service Availability',\n      body: 'Services outlined in the quote are subject to availability at the time of order execution. Should any service or component become unavailable, we will provide alternative solutions or adjusted pricing.',\n    },\n    {\n      heading: 'Payment Terms',\n      body: 'Payment terms will be provided in the final contract agreement after the quote has been accepted and the project scope finalised. The client is responsible for any taxes, duties, or additional fees that may apply.',\n    },\n    {\n      heading: 'Project Timeline',\n      body: 'The timeline for service delivery will be finalised once the quote is accepted, and the client has provided all necessary information. Any delays caused by incomplete client information or requests for changes may affect the timeline and cost.',\n    },\n    {\n      heading: 'Confidentiality',\n      body: 'The details of the quote, including pricing and services, are confidential and may not be shared with third parties without written consent.',\n    },\n    {\n      heading: 'No Obligation',\n      body: 'The client is not obligated to proceed with the services outlined in this quote until a formal contract is signed. Likewise, we reserve the right to withdraw the quote or decline to proceed with the project at our discretion.',\n    },\n    {\n      heading: 'Legal Disclaimer',\n      body: 'The quote provided is for informational purposes only. All services will be subject to a formal contract that outlines final pricing, terms, and service level agreements (SLAs).',\n    },\n    {\n      title: 'Products',\n      list: [\n        {\n          heading: 'L2 VPN',\n          body: [\n            'Prices excludes any applicable cross connect',\n            'Prices are for Silver SLA (single last mile to customer location)',\n            'If the value is N/A, it means NO capacity is offered for the site.',\n          ],\n        },\n        {\n          heading: 'DIA',\n          body: [\n            'Prices excludes any applicable cross connect',\n            'Prices are for Silver SLA which will differ per country',\n            'The contention ratio is 1:1',\n            'If the value is N/A, it means NO capacity is offered for the site.',\n          ],\n        },\n        {\n          heading: 'IP Transit',\n          body: [\n            'Prices excludes any applicable cross connect',\n            'Prices are for Silver SLA which will differ per country',\n            'The contention ratio is 1:1',\n            'If the value is N/A, it means NO capacity is offered for the site.',\n          ],\n        },\n        {\n          heading: 'IPLC',\n          body: [\n            'Prices excludes any applicable cross connect',\n            'Prices are for Silver SLA (single last mile to customer location)',\n            'If the value is N/A, it means NO capacity is offered for the site.',\n          ],\n        },\n      ],\n    },\n    {\n      body: 'LEGAL NOTICE – Disclaimer: This estimate is an approximation and is not guaranteed. The estimate is based on information provided by the client regarding project requirements. Actual costs may change once all project elements are finalised or negotiated. Prior to any changes in cost, the client will be notified.',\n    },\n  ],\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  DashboardWrapper,\n  HeaderWrapper,\n  FeatureAppContainer,\n} from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { termsAndConditionsData } from './terms.config';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst TermsAndConditions = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  // const navigate = useNavigate();\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    terms: process.env.REACT_APP_FA_TERMS_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Terms and Conditions',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.terms ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          {/* <div data-testid='dashboard-app-container' style={{ padding: '10px' }}> */}\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-quick-quotes'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quick Quotes Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-quick-quotes-tc'\n                src={urls.terms}\n                moduleType=''\n                config={{ data: termsAndConditionsData }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Terms and Conditions'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n          {/* </div> */}\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default TermsAndConditions;\n","export const SendAnEmailFormContent = {\n  title: 'Need help with Quick Quotes?',\n\n  formSections: [\n    {\n      title: 'What do you need help with?',\n      fields: [\n        {\n          label: 'Select Subject',\n          name: 'subject',\n          type: 'dropdown',\n          options: [\n            { label: 'Check Quote Status ' },\n            { label: 'Issue with Generated Quote' },\n            { label: 'Product Availability Inquiry ' },\n            { label: 'General Pricing Question ' },\n            { label: 'Clarification on Quote Details ' },\n            { label: 'Follow-Up with Account Manager' },\n          ],\n          isOptional: false,\n        },\n      ],\n    },\n    {\n      title: 'Query information',\n      fields: [\n        {\n          label: 'Additional Information',\n          name: 'additional-info',\n          type: 'textarea',\n          isOptional: false,\n        },\n      ],\n    },\n  ],\n  buttonLabel: 'Submit Request',\n  buttonStatus: true,\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  handleSubmit: (): void => {},\n};\n\nexport const SendAnEmailFormContentWhatsApp = {\n  title: 'Need help with WhatsApp Business Messaging?',\n\n  formSections: [\n    {\n      title: 'What do you need help with?',\n      fields: [\n        {\n          label: 'Select Subject',\n          name: 'subject',\n          type: 'dropdown',\n          options: [\n            { label: 'Sign-Up Assistance with Meta' },\n            { label: 'Issue with Phone Number Management' },\n            { label: 'Trouble with Message Templates or Buttons' },\n            { label: 'Campaign Scheduling or Delivery Questions' },\n            { label: 'General Help or Clarification Needed' },\n          ],\n          isOptional: false,\n        },\n      ],\n    },\n    {\n      title: 'Query information',\n      fields: [\n        {\n          label: 'Additional Information',\n          name: 'additional-info',\n          type: 'textarea',\n          isOptional: false,\n        },\n      ],\n    },\n  ],\n  buttonLabel: 'Submit Request',\n  buttonStatus: true,\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  handleSubmit: (): void => {},\n};\n","import styled from 'styled-components';\n\nexport const FormContainer = styled.div`\n  margin-top: 2rem;\n  padding: var(--padding-xlarge, 32px) var(--padding-large, 24px);\n  border-radius: var(--corner-radius-medium, 24px);\n  background: var(--colour-surface-full, #fff);\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  DashboardWrapper,\n  HeaderWrapper,\n} from '../../customerportal/Dashboard/Dashboard.style';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { SendAnEmailFormContent, SendAnEmailFormContentWhatsApp } from './send-email.config';\nimport { FormContainer } from './SendAnEmail.styled';\nimport { CustomerProfile } from '../../../../models';\nimport { ContainerWrapper } from '../ProductList/ProductList.style';\nimport { useLocation } from 'react-router-dom';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface SendAnEmailProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const SendAnEmail = ({ profile, isSupueruser, logoutF }: SendAnEmailProps): ReactElement => {\n  const { user } = useAuth0();\n\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const location = useLocation();\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const userInfo = {\n    name: profile?.fullName ?? '',\n    phoneNumber: profile?.contactNumber ?? '',\n    emailAddress: profile?.emailAddress ?? '',\n    company: profile?.companyDetails?.name ?? '',\n    country: profile?.companyDetails?.address?.country ?? '',\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Send an email',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      login: logoutF,\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n    }),\n\n    [loading, profile]\n  );\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n    quoteSummary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.header || !urls.connectForm || !urls.quoteSummary) {\n    return <Loading isLoading={true} />;\n  }\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n          <div>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-send-an-email'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Send an email Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <ContainerWrapper>\n              <FormContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-send-email'\n                  src={urls.connectForm}\n                  moduleType=''\n                  config={{\n                    data:\n                      location.pathname === '/whatsapp-business-messaging/email-support'\n                        ? SendAnEmailFormContentWhatsApp\n                        : SendAnEmailFormContent,\n                    currentUrl: '/quick-quotes/email-support',\n                    userInfo: { userInfo },\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Send Email'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FormContainer>\n\n              <FeatureAppContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-email-summary-card'\n                  src={urls.quoteSummary}\n                  moduleType=''\n                  config={{\n                    state: '',\n                    buttonVisibility: false,\n                    dataSets: [],\n                    emailScreen: true,\n                    currentUrl: 'quotes',\n                    request: false,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quote'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FeatureAppContainer>\n            </ContainerWrapper>\n          </div>\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","export const Services = [\n  { label: 'International IPT' },\n  { label: 'Regional IPT' },\n  { label: 'National IPT' },\n  { label: 'OTT Connect' },\n];\n\nexport const SubseaCable = [\n  { label: 'ACE' },\n  { label: 'WACS' },\n  { label: 'EASSy' },\n  { label: 'SEACOM' },\n  { label: 'EASSy/AAE1' },\n  { label: 'SAT3' },\n  { label: 'SMW5' },\n  { label: 'MainOne' },\n  { label: 'AAE1' },\n  { label: 'EASSy/EIG' },\n  { label: 'SAFE' },\n  { label: 'PEACE' },\n  { label: 'ACE/EIG' },\n  { label: 'SAS1' },\n  { label: 'SAS2' },\n  { label: 'Equiano' },\n  { label: 'DARE1' },\n  { label: 'TEAMs' },\n  { label: 'DARE/EIG' },\n  { label: 'DARE/AAE1' },\n  { label: '2Africa East' },\n  { label: '2Africa West' },\n  { label: 'EASSy/WACS' },\n  { label: 'EASSy/PEACE' },\n  { label: 'Other Cables' },\n];\n\nexport const IPLCCapacity = [\n  { label: 'STM-1' },\n  { label: 'STM-4' },\n  { label: 'STM-16' },\n  { label: 'STM-64' },\n  { label: '10 Gbps' },\n  { label: '100 Gbps' },\n  { label: 'Other' },\n];\n\nexport const l3vpnCapacity = [\n  { label: '10 Mbps' },\n  { label: '20 Mbps' },\n  { label: '30 Mbps' },\n  { label: '40 Mbps' },\n  { label: '50 Mbps' },\n  { label: '60 Mbps' },\n  { label: '70 Mbps' },\n  { label: '80 Mbps' },\n  { label: '90 Mbps' },\n  { label: '100 Mbps' },\n  { label: '1 Gbps' },\n];\n\nexport const cloudServiceProvider = [\n  { label: 'Microsoft' },\n  { label: 'Amazon' },\n  { label: 'Google' },\n  { label: 'Oracle' },\n  { label: 'Salesforce' },\n  { label: 'Huawei Cloud' },\n];\n\nexport const cloudCapacity = [\n  { label: '10 Mbps' },\n  { label: '50 Mbps' },\n  { label: '100 Mbps' },\n  { label: '500 Mbps' },\n  { label: '1 Gbps' },\n  { label: '2 Gbps' },\n  { label: '3 Gbps' },\n  { label: '4 Gbps' },\n  { label: '5 Gbps' },\n  { label: '6 Gbps' },\n  { label: '7 Gbps' },\n  { label: '8 Gbps' },\n  { label: '9 Gbps' },\n  { label: '10 Gbps' },\n];\n\nexport const nplcCapacity = [\n  { label: 'STM-1' },\n  { label: 'STM-4' },\n  { label: 'STM-16' },\n  { label: 'STM-64' },\n  { label: '1 Gbps' },\n  { label: '2 Gbps' },\n  { label: '3 Gbps' },\n  { label: '4 Gbps' },\n  { label: '5 Gbps' },\n  { label: '6 Gbps' },\n  { label: '7 Gbps' },\n  { label: '8 Gbps' },\n  { label: '9 Gbps' },\n  { label: '10 Gbps' },\n  { label: '100 Gbps' },\n];\n\nexport const allCountries = [\n  { label: 'Afghanistan' },\n  { label: 'Albania' },\n  { label: 'Algeria' },\n  { label: 'Andorra' },\n  { label: 'Angola' },\n  { label: 'Antigua and Barbuda' },\n  { label: 'Argentina' },\n  { label: 'Armenia' },\n  { label: 'Australia' },\n  { label: 'Austria' },\n  { label: 'Azerbaijan' },\n  { label: 'Bahamas' },\n  { label: 'Bahrain' },\n  { label: 'Bangladesh' },\n  { label: 'Barbados' },\n  { label: 'Belarus' },\n  { label: 'Belgium' },\n  { label: 'Belize' },\n  { label: 'Benin' },\n  { label: 'Bhutan' },\n  { label: 'Bolivia' },\n  { label: 'Bosnia and Herzegovina' },\n  { label: 'Botswana' },\n  { label: 'Brazil' },\n  { label: 'Brunei' },\n  { label: 'Bulgaria' },\n  { label: 'Burkina Faso' },\n  { label: 'Burundi' },\n  { label: 'Cabo Verde' },\n  { label: 'Cambodia' },\n  { label: 'Cameroon' },\n  { label: 'Canada' },\n  { label: 'Central African Republic' },\n  { label: 'Chad' },\n  { label: 'Chile' },\n  { label: 'China' },\n  { label: 'Colombia' },\n  { label: 'Comoros' },\n  { label: 'Congo' },\n  { label: 'Costa Rica' },\n  { label: 'Côte d’Ivoire' },\n  { label: 'Croatia' },\n  { label: 'Cuba' },\n  { label: 'Cyprus' },\n  { label: 'Czech Republic' },\n  { label: 'Denmark' },\n  { label: 'Djibouti' },\n  { label: 'Dominica' },\n  { label: 'Dominican Republic' },\n  { label: 'Ecuador' },\n  { label: 'Egypt' },\n  { label: 'El Salvador' },\n  { label: 'Equatorial Guinea' },\n  { label: 'Eritrea' },\n  { label: 'Eswatini' },\n  { label: 'Estonia' },\n  { label: 'Ethiopia' },\n  { label: 'Fiji' },\n  { label: 'Finland' },\n  { label: 'France' },\n  { label: 'Gabon' },\n  { label: 'Gambia' },\n  { label: 'Georgia' },\n  { label: 'Germany' },\n  { label: 'Ghana' },\n  { label: 'Greece' },\n  { label: 'Grenada' },\n  { label: 'Guatemala' },\n  { label: 'Guinea' },\n  { label: 'Guinea-Bissau' },\n  { label: 'Guyana' },\n  { label: 'Haiti' },\n  { label: 'Honduras' },\n  { label: 'Hungary' },\n  { label: 'Iceland' },\n  { label: 'India' },\n  { label: 'Indonesia' },\n  { label: 'Iran' },\n  { label: 'Iraq' },\n  { label: 'Ireland' },\n  { label: 'Israel' },\n  { label: 'Italy' },\n  { label: 'Jamaica' },\n  { label: 'Japan' },\n  { label: 'Jordan' },\n  { label: 'Kazakhstan' },\n  { label: 'Kenya' },\n  { label: 'Kiribati' },\n  { label: 'Kosovo' },\n  { label: 'Kuwait' },\n  { label: 'Kyrgyzstan' },\n  { label: 'Laos' },\n  { label: 'Latvia' },\n  { label: 'Lebanon' },\n  { label: 'Lesotho' },\n  { label: 'Liberia' },\n  { label: 'Libya' },\n  { label: 'Liechtenstein' },\n  { label: 'Lithuania' },\n  { label: 'Luxembourg' },\n  { label: 'Madagascar' },\n  { label: 'Malawi' },\n  { label: 'Malaysia' },\n  { label: 'Maldives' },\n  { label: 'Mali' },\n  { label: 'Malta' },\n  { label: 'Marshall Islands' },\n  { label: 'Mauritania' },\n  { label: 'Mauritius' },\n  { label: 'Mexico' },\n  { label: 'Micronesia' },\n  { label: 'Moldova' },\n  { label: 'Monaco' },\n  { label: 'Mongolia' },\n  { label: 'Montenegro' },\n  { label: 'Morocco' },\n  { label: 'Mozambique' },\n  { label: 'Myanmar' },\n  { label: 'Namibia' },\n  { label: 'Nauru' },\n  { label: 'Nepal' },\n  { label: 'Netherlands' },\n  { label: 'New Zealand' },\n  { label: 'Nicaragua' },\n  { label: 'Niger' },\n  { label: 'Nigeria' },\n  { label: 'North Korea' },\n  { label: 'North Macedonia' },\n  { label: 'Norway' },\n  { label: 'Oman' },\n  { label: 'Pakistan' },\n  { label: 'Palau' },\n  { label: 'Palestine' },\n  { label: 'Panama' },\n  { label: 'Papua New Guinea' },\n  { label: 'Paraguay' },\n  { label: 'Peru' },\n  { label: 'Philippines' },\n  { label: 'Poland' },\n  { label: 'Portugal' },\n  { label: 'Qatar' },\n  { label: 'Romania' },\n  { label: 'Russia' },\n  { label: 'Rwanda' },\n  { label: 'Saint Kitts and Nevis' },\n  { label: 'Saint Lucia' },\n  { label: 'Saint Vincent and the Grenadines' },\n  { label: 'Samoa' },\n  { label: 'San Marino' },\n  { label: 'Sao Tome and Principe' },\n  { label: 'Saudi Arabia' },\n  { label: 'Senegal' },\n  { label: 'Serbia' },\n  { label: 'Seychelles' },\n  { label: 'Sierra Leone' },\n  { label: 'Singapore' },\n  { label: 'Slovakia' },\n  { label: 'Slovenia' },\n  { label: 'Solomon Islands' },\n  { label: 'Somalia' },\n  { label: 'South Africa' },\n  { label: 'South Korea' },\n  { label: 'South Sudan' },\n  { label: 'Spain' },\n  { label: 'Sri Lanka' },\n  { label: 'Sudan' },\n  { label: 'Suriname' },\n  { label: 'Sweden' },\n  { label: 'Switzerland' },\n  { label: 'Syria' },\n  { label: 'Taiwan' },\n  { label: 'Tajikistan' },\n  { label: 'Tanzania' },\n  { label: 'Thailand' },\n  { label: 'Timor-Leste' },\n  { label: 'Togo' },\n  { label: 'Tonga' },\n  { label: 'Trinidad and Tobago' },\n  { label: 'Tunisia' },\n  { label: 'Turkey' },\n  { label: 'Turkmenistan' },\n  { label: 'Tuvalu' },\n  { label: 'Uganda' },\n  { label: 'Ukraine' },\n  { label: 'United Arab Emirates' },\n  { label: 'United Kingdom' },\n  { label: 'United States of America' },\n  { label: 'Uruguay' },\n  { label: 'Uzbekistan' },\n  { label: 'Vanuatu' },\n  { label: 'Vatican City' },\n  { label: 'Venezuela' },\n  { label: 'Vietnam' },\n  { label: 'Yemen' },\n  { label: 'Zambia' },\n  { label: 'Zimbabwe' },\n];\n\nexport const regions = [\n  { label: 'South Africa' },\n  { label: 'Europe' },\n  { label: 'Ireland' },\n  { label: 'Other' },\n];\n\nexport const countriesWithCities = [\n  {\n    country: 'Afghanistan',\n    cities: ['Kabul', 'Kandahar', 'Herat', 'Mazar-i-Sharif', 'Jalalabad'],\n  },\n  {\n    country: 'Albania',\n    cities: ['Tirana', 'Durrës', 'Vlorë', 'Shkodër', 'Fier'],\n  },\n  {\n    country: 'Algeria',\n    cities: ['Algiers', 'Oran', 'Constantine', 'Annaba', 'Blida'],\n  },\n  {\n    country: 'Andorra',\n    cities: [\n      'Andorra la Vella',\n      'Escaldes-Engordany',\n      'Encamp',\n      'La Massana',\n      'Sant Julià de Lòria',\n    ],\n  },\n  {\n    country: 'Angola',\n    cities: ['Luanda', 'Huambo', 'Lobito', 'Lubango', 'Benguela'],\n  },\n  {\n    country: 'Argentina',\n    cities: ['Buenos Aires', 'Córdoba', 'Rosario', 'Mendoza', 'La Plata'],\n  },\n  {\n    country: 'Armenia',\n    cities: ['Yerevan', 'Gyumri', 'Vanadzor', 'Hrazdan', 'Abovyan'],\n  },\n  {\n    country: 'Australia',\n    cities: ['Sydney', 'Melbourne', 'Brisbane', 'Perth', 'Adelaide'],\n  },\n  {\n    country: 'Austria',\n    cities: ['Vienna', 'Graz', 'Linz', 'Salzburg', 'Innsbruck'],\n  },\n  {\n    country: 'Azerbaijan',\n    cities: ['Baku', 'Ganja', 'Sumqayit', 'Mingachevir', 'Nakhchivan'],\n  },\n  {\n    country: 'Bahamas',\n    cities: ['Nassau', 'Freeport', 'West End', 'Lucaya', 'Rock Sound'],\n  },\n  {\n    country: 'Bahrain',\n    cities: ['Manama', 'Riffa', 'Muharraq', 'Hamad Town', \"A'ali\"],\n  },\n  {\n    country: 'Bangladesh',\n    cities: ['Dhaka', 'Chittagong', 'Khulna', 'Rajshahi', 'Sylhet'],\n  },\n  {\n    country: 'Barbados',\n    cities: ['Bridgetown', 'Speightstown', 'Oistins', 'Holetown', 'Bathsheba'],\n  },\n  {\n    country: 'Belarus',\n    cities: ['Minsk', 'Gomel', 'Mogilev', 'Vitebsk', 'Grodno'],\n  },\n  {\n    country: 'Belgium',\n    cities: ['Brussels', 'Antwerp', 'Ghent', 'Charleroi', 'Liège'],\n  },\n  {\n    country: 'Belize',\n    cities: ['Belize City', 'San Ignacio', 'Orange Walk', 'Dangriga', 'Belmopan'],\n  },\n  {\n    country: 'Benin',\n    cities: ['Cotonou', 'Porto-Novo', 'Parakou', 'Djougou', 'Bohicon'],\n  },\n  {\n    country: 'Bhutan',\n    cities: ['Thimphu', 'Phuntsholing', 'Punakha', 'Wangdue Phodrang', 'Paro'],\n  },\n  {\n    country: 'Bolivia',\n    cities: ['La Paz', 'Santa Cruz de la Sierra', 'Cochabamba', 'Sucre', 'Oruro'],\n  },\n  {\n    country: 'Bosnia and Herzegovina',\n    cities: ['Sarajevo', 'Banja Luka', 'Mostar', 'Tuzla', 'Zenica'],\n  },\n  {\n    country: 'Botswana',\n    cities: ['Gaborone', 'Francistown', 'Molepolole', 'Maun', 'Kanye'],\n  },\n  {\n    country: 'Brazil',\n    cities: ['São Paulo', 'Rio de Janeiro', 'Brasília', 'Salvador', 'Fortaleza'],\n  },\n  {\n    country: 'Brunei',\n    cities: ['Bandar Seri Begawan', 'Kuala Belait', 'Seria', 'Tutong', 'Bangar'],\n  },\n  {\n    country: 'Bulgaria',\n    cities: ['Sofia', 'Plovdiv', 'Varna', 'Burgas', 'Ruse'],\n  },\n  {\n    country: 'Burkina Faso',\n    cities: ['Ouagadougou', 'Bobo-Dioulasso', 'Koudougou', 'Banfora', 'Ouahigouya'],\n  },\n  {\n    country: 'Burundi',\n    cities: ['Bujumbura', 'Gitega', 'Ngozi', 'Ruyigi', 'Kayanza'],\n  },\n  {\n    country: 'Cambodia',\n    cities: ['Phnom Penh', 'Siem Reap', 'Battambang', 'Sihanoukville', 'Kampong Cham'],\n  },\n  {\n    country: 'Cameroon',\n    cities: ['Douala', 'Yaoundé', 'Garoua', 'Bamenda', 'Maroua'],\n  },\n  {\n    country: 'Canada',\n    cities: ['Toronto', 'Vancouver', 'Montreal', 'Calgary', 'Ottawa'],\n  },\n  {\n    country: 'Cape Verde',\n    cities: ['Praia', 'Mindelo', 'Santa Maria', 'Cova Figueira', 'São Filipe'],\n  },\n  {\n    country: 'Central African Republic',\n    cities: ['Bangui', 'Bimbo', 'Mbaïki', 'Berbérati', 'Carnot'],\n  },\n  {\n    country: 'Chad',\n    cities: [\"N'Djamena\", 'Moundou', 'Sarh', 'Abéché', 'Kélo'],\n  },\n  {\n    country: 'Chile',\n    cities: ['Santiago', 'Valparaíso', 'Concepción', 'La Serena', 'Antofagasta'],\n  },\n  {\n    country: 'China',\n    cities: ['Shanghai', 'Beijing', 'Chongqing', 'Tianjin', 'Guangzhou'],\n  },\n  {\n    country: 'Colombia',\n    cities: ['Bogotá', 'Medellín', 'Cali', 'Barranquilla', 'Cartagena'],\n  },\n  {\n    country: 'Comoros',\n    cities: ['Moroni', 'Mutsamudu', 'Fomboni', 'Domoni', 'Sima'],\n  },\n  {\n    country: 'Congo (Brazzaville)',\n    cities: ['Brazzaville', 'Pointe-Noire', 'Dolisie', 'Nkayi', 'Ouésso'],\n  },\n  {\n    country: 'Congo (Kinshasa)',\n    cities: ['Kinshasa', 'Lubumbashi', 'Mbuji-Mayi', 'Kananga', 'Kisangani'],\n  },\n  {\n    country: 'Costa Rica',\n    cities: ['San José', 'Limón', 'Alajuela', 'Cartago', 'Puntarenas'],\n  },\n  {\n    country: 'Croatia',\n    cities: ['Zagreb', 'Split', 'Rijeka', 'Osijek', 'Zadar'],\n  },\n  {\n    country: 'Cuba',\n    cities: ['Havana', 'Santiago de Cuba', 'Camagüey', 'Holguín', 'Guantánamo'],\n  },\n  {\n    country: 'Cyprus',\n    cities: ['Nicosia', 'Limassol', 'Larnaca', 'Famagusta', 'Paphos'],\n  },\n  {\n    country: 'Czech Republic',\n    cities: ['Prague', 'Brno', 'Ostrava', 'Plzeň', 'Liberec'],\n  },\n  {\n    country: 'Denmark',\n    cities: ['Copenhagen', 'Aarhus', 'Odense', 'Aalborg', 'Esbjerg'],\n  },\n  {\n    country: 'Djibouti',\n    cities: ['Djibouti', 'Ali Sabieh', 'Tadjoura', 'Obock', 'Dikhil'],\n  },\n  {\n    country: 'Dominica',\n    cities: ['Roseau', 'Portsmouth', 'Marigot', 'Berekua', 'Mahaut'],\n  },\n  {\n    country: 'Dominican Republic',\n    cities: [\n      'Santo Domingo',\n      'Santiago de los Caballeros',\n      'La Vega',\n      'Puerto Plata',\n      'San Cristóbal',\n    ],\n  },\n  {\n    country: 'East Timor',\n    cities: ['Dili', 'Baucau', 'Maliana', 'Liquiçá', 'Suai'],\n  },\n  {\n    country: 'Ecuador',\n    cities: ['Quito', 'Guayaquil', 'Cuenca', 'Santo Domingo', 'Machala'],\n  },\n  {\n    country: 'Egypt',\n    cities: ['Cairo', 'Alexandria', 'Giza', 'Shubra El-Kheima', 'Port Said'],\n  },\n  {\n    country: 'El Salvador',\n    cities: ['San Salvador', 'Santa Ana', 'San Miguel', 'Mejicanos', 'Soyapango'],\n  },\n  {\n    country: 'Equatorial Guinea',\n    cities: ['Malabo', 'Bata', 'Ebebiyin', 'Aconibe', 'Mongomo'],\n  },\n  {\n    country: 'Eritrea',\n    cities: ['Asmara', 'Keren', 'Massawa', 'Mendefera', 'Assab'],\n  },\n  {\n    country: 'Estonia',\n    cities: ['Tallinn', 'Tartu', 'Narva', 'Pärnu', 'Kohtla-Järve'],\n  },\n  {\n    country: 'Eswatini',\n    cities: ['Mbabane', 'Manzini', 'Big Bend', 'Mhlume', 'Hluti'],\n  },\n  {\n    country: 'Ethiopia',\n    cities: ['Addis Ababa', 'Dire Dawa', 'Mekelle', 'Gondar', 'Bahir Dar'],\n  },\n\n  {\n    country: 'Fiji',\n    cities: ['Suva', 'Nadi', 'Lautoka', 'Labasa', 'Ba'],\n  },\n  {\n    country: 'Finland',\n    cities: ['Helsinki', 'Espoo', 'Tampere', 'Vantaa', 'Oulu'],\n  },\n  {\n    country: 'France',\n    cities: ['Paris', 'Marseille', 'Lyon', 'Toulouse', 'Nice'],\n  },\n  {\n    country: 'Gabon',\n    cities: ['Libreville', 'Port-Gentil', 'Franceville', 'Oyem', 'Moanda'],\n  },\n  {\n    country: 'Gambia',\n    cities: ['Banjul', 'Serekunda', 'Brikama', 'Bakau', 'Farafenni'],\n  },\n  {\n    country: 'Georgia',\n    cities: ['Tbilisi', 'Kutaisi', 'Batumi', 'Rustavi', 'Zugdidi'],\n  },\n  {\n    country: 'Germany',\n    cities: ['Berlin', 'Hamburg', 'Munich', 'Cologne', 'Frankfurt'],\n  },\n  {\n    country: 'Ghana',\n    cities: ['Accra', 'Kumasi', 'Tamale', 'Takoradi', 'Tema'],\n  },\n  {\n    country: 'Greece',\n    cities: ['Athens', 'Thessaloniki', 'Patras', 'Heraklion', 'Larissa'],\n  },\n  {\n    country: 'Grenada',\n    cities: [\"St. George's\", 'Gouyave', 'Grenville', 'Victoria', 'Hillsborough'],\n  },\n  {\n    country: 'Guatemala',\n    cities: ['Guatemala City', 'Quetzaltenango', 'Escuintla', 'Mixco', 'Villa Nueva'],\n  },\n  {\n    country: 'Guinea',\n    cities: ['Conakry', 'Nzérékoré', 'Kankan', 'Kindia', 'Labé'],\n  },\n  {\n    country: 'Guinea-Bissau',\n    cities: ['Bissau', 'Bafatá', 'Gabú', 'Bissorã', 'Cacheu'],\n  },\n  {\n    country: 'Guyana',\n    cities: ['Georgetown', 'Linden', 'New Amsterdam', 'Bartica', 'Skeldon'],\n  },\n  {\n    country: 'Haiti',\n    cities: ['Port-au-Prince', 'Cap-Haïtien', 'Les Cayes', 'Gonaïves', 'Saint-Marc'],\n  },\n  {\n    country: 'Honduras',\n    cities: ['Tegucigalpa', 'San Pedro Sula', 'La Ceiba', 'Choluteca', 'El Progreso'],\n  },\n  {\n    country: 'Hungary',\n    cities: ['Budapest', 'Debrecen', 'Szeged', 'Miskolc', 'Pécs'],\n  },\n  {\n    country: 'Iceland',\n    cities: ['Reykjavik', 'Kopavogur', 'Hafnarfjordur', 'Akureyri', 'Reykjanesbær'],\n  },\n  {\n    country: 'Iran',\n    cities: ['Tehran', 'Mashhad', 'Isfahan', 'Karaj', 'Shiraz'],\n  },\n  {\n    country: 'Iraq',\n    cities: ['Baghdad', 'Basra', 'Mosul', 'Erbil', 'Kirkuk'],\n  },\n  {\n    country: 'Ireland',\n    cities: ['Dublin', 'Cork', 'Limerick', 'Galway', 'Waterford'],\n  },\n  {\n    country: 'Israel',\n    cities: ['Jerusalem', 'Tel Aviv', 'Haifa', 'Rishon LeZion', 'Petah Tikva'],\n  },\n  {\n    country: 'Italy',\n    cities: ['Rome', 'Milan', 'Naples', 'Turin', 'Palermo'],\n  },\n  {\n    country: 'Jamaica',\n    cities: ['Kingston', 'Montego Bay', 'Spanish Town', 'Portmore', 'Mandeville'],\n  },\n  {\n    country: 'Japan',\n    cities: ['Tokyo', 'Osaka', 'Yokohama', 'Nagoya', 'Sapporo'],\n  },\n  {\n    country: 'Jordan',\n    cities: ['Amman', 'Zarqa', 'Irbid', 'Aqaba', 'Russeifa'],\n  },\n  {\n    country: 'Kazakhstan',\n    cities: ['Nur-Sultan', 'Almaty', 'Shymkent', 'Karaganda', 'Aktobe'],\n  },\n  {\n    country: 'Kenya',\n    cities: ['Nairobi', 'Mombasa', 'Kisumu', 'Nakuru', 'Eldoret'],\n  },\n  {\n    country: 'Kiribati',\n    cities: ['Tarawa', 'Betio', 'Bikenibeu', 'Bairiki', 'Teaoraereke'],\n  },\n  {\n    country: 'Kosovo',\n    cities: ['Pristina', 'Mitrovica', 'Peć', 'Prizren', 'Gjilan'],\n  },\n  {\n    country: 'Kuwait',\n    cities: ['Kuwait City', 'Hawalli', 'Al Ahmadi', 'Al Farwaniyah', 'Jahra'],\n  },\n  {\n    country: 'Kyrgyzstan',\n    cities: ['Bishkek', 'Osh', 'Jalal-Abad', 'Karakol', 'Tokmok'],\n  },\n  {\n    country: 'Laos',\n    cities: ['Vientiane', 'Luang Prabang', 'Savannakhet', 'Pakse', 'Thakhek'],\n  },\n  {\n    country: 'Latvia',\n    cities: ['Riga', 'Daugavpils', 'Liepāja', 'Jelgava', 'Jūrmala'],\n  },\n  {\n    country: 'Lebanon',\n    cities: ['Beirut', 'Tripoli', 'Sidon', 'Zahle', 'Tyre'],\n  },\n  {\n    country: 'Lesotho',\n    cities: ['Maseru', 'Teyateyaneng', 'Leribe', 'Maputsoe', 'Mokhotlong'],\n  },\n  {\n    country: 'Liberia',\n    cities: ['Monrovia', 'Gbarnga', 'Kakata', 'Harper', 'Voinjama'],\n  },\n  {\n    country: 'Libya',\n    cities: ['Tripoli', 'Benghazi', 'Misrata', 'Bayda', 'Zawiya'],\n  },\n  {\n    country: 'Liechtenstein',\n    cities: ['Vaduz', 'Schaan', 'Balzers', 'Triesen', 'Eschen'],\n  },\n  {\n    country: 'Lithuania',\n    cities: ['Vilnius', 'Kaunas', 'Klaipėda', 'Šiauliai', 'Panevėžys'],\n  },\n  {\n    country: 'Luxembourg',\n    cities: ['Luxembourg City', 'Esch-sur-Alzette', 'Differdange', 'Dudelange', 'Ettelbruck'],\n  },\n  {\n    country: 'Madagascar',\n    cities: ['Antananarivo', 'Toamasina', 'Antsirabe', 'Fianarantsoa', 'Mahajanga'],\n  },\n  {\n    country: 'Malawi',\n    cities: ['Lilongwe', 'Blantyre', 'Mzuzu', 'Zomba', 'Kasungu'],\n  },\n  {\n    country: 'Malaysia',\n    cities: ['Kuala Lumpur', 'George Town', 'Ipoh', 'Johor Bahru', 'Kuching'],\n  },\n  {\n    country: 'Maldives',\n    cities: ['Malé', 'Addu City', 'Fuvahmulah', 'Kulhudhuffushi', 'Thinadhoo'],\n  },\n  {\n    country: 'Mali',\n    cities: ['Bamako', 'Sikasso', 'Koutiala', 'Ségou', 'Mopti'],\n  },\n  {\n    country: 'Malta',\n    cities: ['Valletta', 'Birkirkara', 'Mosta', 'Sliema', 'San Ġwann'],\n  },\n  {\n    country: 'Marshall Islands',\n    cities: ['Majuro', 'Ebeye', 'Jaluit', 'Wotje', 'Kwajalein'],\n  },\n  {\n    country: 'Mauritania',\n    cities: ['Nouakchott', 'Nouadhibou', 'Rosso', 'Kaédi', 'Zouerate'],\n  },\n  {\n    country: 'Mauritius',\n    cities: ['Port Louis', 'Curepipe', 'Vacoas', 'Quatre Bornes', 'Beau Bassin-Rose Hill'],\n  },\n  {\n    country: 'Mexico',\n    cities: ['Mexico City', 'Guadalajara', 'Monterrey', 'Puebla', 'Tijuana'],\n  },\n  {\n    country: 'Micronesia',\n    cities: ['Palikir', 'Kolonia', 'Tofol', 'Weno', 'Lelu'],\n  },\n  {\n    country: 'Moldova',\n    cities: ['Chișinău', 'Tiraspol', 'Bălți', 'Bender', 'Cahul'],\n  },\n  {\n    country: 'Monaco',\n    cities: ['Monaco', 'Monte Carlo', 'La Condamine', 'Fontvieille', 'Moneghetti'],\n  },\n  {\n    country: 'Mongolia',\n    cities: ['Ulaanbaatar', 'Erdenet', 'Darkhan', 'Choibalsan', 'Ölgii'],\n  },\n  {\n    country: 'Montenegro',\n    cities: ['Podgorica', 'Nikšić', 'Herceg Novi', 'Pljevlja', 'Bijelo Polje'],\n  },\n  {\n    country: 'Morocco',\n    cities: ['Casablanca', 'Rabat', 'Fes', 'Marrakesh', 'Tangier'],\n  },\n  {\n    country: 'Mozambique',\n    cities: ['Maputo', 'Beira', 'Nampula', 'Chimoio', 'Quelimane'],\n  },\n  {\n    country: 'Myanmar (Burma)',\n    cities: ['Yangon', 'Mandalay', 'Naypyidaw', 'Mawlamyine', 'Bago'],\n  },\n  {\n    country: 'Namibia',\n    cities: ['Windhoek', 'Rundu', 'Walvis Bay', 'Swakopmund', 'Oshakati'],\n  },\n  {\n    country: 'Nauru',\n    cities: ['Yaren', 'Denigomodu', 'Aiwo', 'Anibare', 'Buada'],\n  },\n  {\n    country: 'Nepal',\n    cities: ['Kathmandu', 'Pokhara', 'Lalitpur', 'Biratnagar', 'Birgunj'],\n  },\n  {\n    country: 'Netherlands',\n    cities: ['Amsterdam', 'Rotterdam', 'The Hague', 'Utrecht', 'Eindhoven'],\n  },\n  {\n    country: 'New Zealand',\n    cities: ['Auckland', 'Wellington', 'Christchurch', 'Hamilton', 'Dunedin'],\n  },\n  {\n    country: 'Nicaragua',\n    cities: ['Managua', 'León', 'Masaya', 'Chinandega', 'Granada'],\n  },\n  {\n    country: 'Niger',\n    cities: ['Niamey', 'Zinder', 'Maradi', 'Agadez', 'Tahoua'],\n  },\n  {\n    country: 'Nigeria',\n    cities: ['Lagos', 'Abuja', 'Kano', 'Ibadan', 'Port Harcourt'],\n  },\n  {\n    country: 'North Korea',\n    cities: ['Pyongyang', 'Hamhung', 'Chongjin', 'Nampo', 'Sinuiju'],\n  },\n  {\n    country: 'North Macedonia',\n    cities: ['Skopje', 'Bitola', 'Kumanovo', 'Prilep', 'Tetovo'],\n  },\n  {\n    country: 'Norway',\n    cities: ['Oslo', 'Bergen', 'Stavanger', 'Trondheim', 'Drammen'],\n  },\n  {\n    country: 'Oman',\n    cities: ['Muscat', 'Salalah', 'Sohar', 'Nizwa', 'Sur'],\n  },\n  {\n    country: 'Pakistan',\n    cities: ['Karachi', 'Lahore', 'Islamabad', 'Rawalpindi', 'Faisalabad'],\n  },\n  {\n    country: 'Palau',\n    cities: ['Ngerulmud', 'Koror', 'Melekeok', 'Ngaraard', 'Angaur'],\n  },\n  {\n    country: 'Panama',\n    cities: ['Panama City', 'San Miguelito', 'Colón', 'David', 'La Chorrera'],\n  },\n  {\n    country: 'Papua New Guinea',\n    cities: ['Port Moresby', 'Lae', 'Mount Hagen', 'Madang', 'Goroka'],\n  },\n  {\n    country: 'Paraguay',\n    cities: ['Asunción', 'Ciudad del Este', 'San Lorenzo', 'Lambaré', 'Fernando de la Mora'],\n  },\n  {\n    country: 'Peru',\n    cities: ['Lima', 'Arequipa', 'Trujillo', 'Chiclayo', 'Piura'],\n  },\n  {\n    country: 'Philippines',\n    cities: ['Manila', 'Quezon City', 'Cebu City', 'Davao City', 'Zamboanga City'],\n  },\n  {\n    country: 'Poland',\n    cities: ['Warsaw', 'Kraków', 'Łódź', 'Wrocław', 'Poznań'],\n  },\n  {\n    country: 'Portugal',\n    cities: ['Lisbon', 'Porto', 'Braga', 'Coimbra', 'Funchal'],\n  },\n  {\n    country: 'Qatar',\n    cities: ['Doha', 'Al Rayyan', 'Al Wakrah', 'Al Khor', 'Dukhan'],\n  },\n  {\n    country: 'Romania',\n    cities: ['Bucharest', 'Cluj-Napoca', 'Timișoara', 'Iași', 'Constanța'],\n  },\n  {\n    country: 'Russia',\n    cities: ['Moscow', 'Saint Petersburg', 'Novosibirsk', 'Yekaterinburg', 'Nizhny Novgorod'],\n  },\n  {\n    country: 'Rwanda',\n    cities: ['Kigali', 'Butare', 'Gitarama', 'Ruhengeri', 'Gisenyi'],\n  },\n  {\n    country: 'Saint Kitts and Nevis',\n    cities: ['Basseterre', 'Charlestown', 'Sandy Point Town', 'Dieppe Bay Town', 'Cayon'],\n  },\n  {\n    country: 'Saint Lucia',\n    cities: ['Castries', 'Gros Islet', 'Soufrière', 'Vieux Fort', 'Micoud'],\n  },\n  {\n    country: 'Saint Vincent and the Grenadines',\n    cities: ['Kingstown', 'Georgetown', 'Barrouallie', 'Chateaubelair', 'Layou'],\n  },\n  {\n    country: 'Samoa',\n    cities: ['Apia', 'Vaitele', 'Faleula', 'Siusega', 'Afega'],\n  },\n  {\n    country: 'San Marino',\n    cities: ['San Marino', 'Serravalle', 'Borgo Maggiore', 'Domagnano', 'Fiorentino'],\n  },\n  {\n    country: 'Sao Tome and Principe',\n    cities: ['São Tomé', 'Santo Amaro', 'Neves', 'Guadalupe', 'Santana'],\n  },\n  {\n    country: 'Saudi Arabia',\n    cities: ['Riyadh', 'Jeddah', 'Mecca', 'Medina', 'Dammam'],\n  },\n  {\n    country: 'Senegal',\n    cities: ['Dakar', 'Touba', 'Thiès', 'Kaolack', 'Mbour'],\n  },\n  {\n    country: 'Serbia',\n    cities: ['Belgrade', 'Novi Sad', 'Niš', 'Kragujevac', 'Subotica'],\n  },\n  {\n    country: 'Seychelles',\n    cities: ['Victoria', 'Anse Boileau', 'Bel Ombre', 'Beau Vallon', 'Takamaka'],\n  },\n  {\n    country: 'Sierra Leone',\n    cities: ['Freetown', 'Bo', 'Kenema', 'Makeni', 'Koidu'],\n  },\n  {\n    country: 'Singapore',\n    cities: ['Singapore'],\n  },\n  {\n    country: 'Slovakia',\n    cities: ['Bratislava', 'Košice', 'Prešov', 'Žilina', 'Nitra'],\n  },\n  {\n    country: 'Slovenia',\n    cities: ['Ljubljana', 'Maribor', 'Celje', 'Kranj', 'Velenje'],\n  },\n  {\n    country: 'Solomon Islands',\n    cities: ['Honiara', 'Gizo', 'Auki', 'Noro', 'Tulagi'],\n  },\n  {\n    country: 'Somalia',\n    cities: ['Mogadishu', 'Hargeisa', 'Bosaso', 'Kismayo', 'Baidoa'],\n  },\n  {\n    country: 'South Africa',\n    cities: ['Johannesburg', 'Cape Town', 'Durban', 'Pretoria', 'Port Elizabeth'],\n  },\n  {\n    country: 'South Korea',\n    cities: ['Seoul', 'Busan', 'Incheon', 'Daegu', 'Daejeon'],\n  },\n  {\n    country: 'South Sudan',\n    cities: ['Juba', 'Malakal', 'Wau', 'Aweil', 'Bor'],\n  },\n  {\n    country: 'Spain',\n    cities: ['Madrid', 'Barcelona', 'Valencia', 'Seville', 'Zaragoza'],\n  },\n  {\n    country: 'Sri Lanka',\n    cities: ['Colombo', 'Kandy', 'Galle', 'Jaffna', 'Negombo'],\n  },\n  {\n    country: 'Sudan',\n    cities: ['Khartoum', 'Omdurman', 'Port Sudan', 'Kassala', 'El Obeid'],\n  },\n  {\n    country: 'Suriname',\n    cities: ['Paramaribo', 'Lelydorp', 'Nieuw Nickerie', 'Moengo', 'Albina'],\n  },\n  {\n    country: 'Sweden',\n    cities: ['Stockholm', 'Gothenburg', 'Malmö', 'Uppsala', 'Västerås'],\n  },\n  {\n    country: 'Switzerland',\n    cities: ['Zurich', 'Geneva', 'Basel', 'Lausanne', 'Bern'],\n  },\n  {\n    country: 'Syria',\n    cities: ['Damascus', 'Aleppo', 'Homs', 'Latakia', 'Hama'],\n  },\n  {\n    country: 'Taiwan',\n    cities: ['Taipei', 'Kaohsiung', 'Taichung', 'Tainan', 'Hsinchu'],\n  },\n  {\n    country: 'Tajikistan',\n    cities: ['Dushanbe', 'Khujand', 'Kulob', 'Qurghonteppa', 'Istaravshan'],\n  },\n  {\n    country: 'Tanzania',\n    cities: ['Dar es Salaam', 'Mwanza', 'Arusha', 'Dodoma', 'Mbeya'],\n  },\n  {\n    country: 'Thailand',\n    cities: ['Bangkok', 'Nonthaburi', 'Chiang Mai', 'Hat Yai', 'Nakhon Ratchasima'],\n  },\n  {\n    country: 'Timor-Leste',\n    cities: ['Dili', 'Baucau', 'Maliana', 'Suai', 'Aileu'],\n  },\n  {\n    country: 'Togo',\n    cities: ['Lomé', 'Sokodé', 'Kara', 'Kpalimé', 'Atakpamé'],\n  },\n  {\n    country: 'Tonga',\n    cities: ['Nukuʻalofa', 'Neiafu', 'Haveluloto', 'Vaini', 'Kolonga'],\n  },\n  {\n    country: 'Trinidad and Tobago',\n    cities: ['Port of Spain', 'San Fernando', 'Chaguanas', 'Arima', 'Scarborough'],\n  },\n  {\n    country: 'Tunisia',\n    cities: ['Tunis', 'Sfax', 'Sousse', 'Ettadhamen', 'Kairouan'],\n  },\n  {\n    country: 'Turkey',\n    cities: ['Istanbul', 'Ankara', 'Izmir', 'Bursa', 'Antalya'],\n  },\n  {\n    country: 'Turkmenistan',\n    cities: ['Ashgabat', 'Türkmenabat', 'Daşoguz', 'Mary', 'Balkanabat'],\n  },\n  {\n    country: 'Tuvalu',\n    cities: ['Funafuti', 'Vaiaku', 'Nanumanga', 'Niutao', 'Nanumea'],\n  },\n  {\n    country: 'Uganda',\n    cities: ['Kampala', 'Gulu', 'Lira', 'Mbarara', 'Jinja'],\n  },\n  {\n    country: 'Ukraine',\n    cities: ['Kyiv', 'Kharkiv', 'Odessa', 'Dnipro', 'Donetsk'],\n  },\n  {\n    country: 'United Arab Emirates',\n    cities: ['Dubai', 'Abu Dhabi', 'Sharjah', 'Al Ain', 'Ajman'],\n  },\n  {\n    country: 'United Kingdom',\n    cities: ['London', 'Birmingham', 'Manchester', 'Glasgow', 'Liverpool'],\n  },\n  {\n    country: 'United States',\n    cities: ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],\n  },\n  {\n    country: 'Uruguay',\n    cities: ['Montevideo', 'Salto', 'Paysandú', 'Las Piedras', 'Rivera'],\n  },\n  {\n    country: 'Uzbekistan',\n    cities: ['Tashkent', 'Samarkand', 'Namangan', 'Andijan', 'Bukhara'],\n  },\n  {\n    country: 'Vanuatu',\n    cities: ['Port Vila', 'Luganville', 'Norsup', 'Isangel', 'Sola'],\n  },\n  {\n    country: 'Vatican City',\n    cities: ['Vatican City'],\n  },\n  {\n    country: 'Venezuela',\n    cities: ['Caracas', 'Maracaibo', 'Valencia', 'Barquisimeto', 'Ciudad Guayana'],\n  },\n  {\n    country: 'Vietnam',\n    cities: ['Ho Chi Minh City', 'Hanoi', 'Da Nang', 'Haiphong', 'Nha Trang'],\n  },\n  {\n    country: 'Yemen',\n    cities: [\"Sana'a\", 'Aden', 'Taiz', 'Ibb', 'Al Hudaydah'],\n  },\n  {\n    country: 'Zambia',\n    cities: ['Lusaka', 'Kitwe', 'Ndola', 'Kabwe', 'Chingola'],\n  },\n  {\n    country: 'Zimbabwe',\n    cities: ['Harare', 'Bulawayo', 'Chitungwiza', 'Mutare', 'Gweru'],\n  },\n];\n","import {\n  allCountries,\n  cloudCapacity,\n  cloudServiceProvider,\n  countriesWithCities,\n  IPLCCapacity,\n  l3vpnCapacity,\n  nplcCapacity,\n  regions,\n  SubseaCable,\n  Services,\n} from './FormDataSets';\nimport { twoVpnCountriesBandwidth } from './L2vpnFormDataSets';\n\nimport { iptBandwidths } from './IptFormDataSets';\n\nexport const forms: formTypes = {\n  '/quick-quotes/create-quote/customise-product/iplc': {\n    title: 'IPLC Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Locations',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location A',\n            name: 'locationA',\n            type: 'dropdown',\n            options: countriesWithCities.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n          {\n            label: 'Select Location B',\n            name: 'locationB',\n            type: 'dropdown',\n            options: countriesWithCities.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: IPLCCapacity,\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Subsea Cable',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Subsea Cable',\n            name: 'subSeaCable',\n            type: 'dropdown',\n            options: SubseaCable,\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Select Contract Type',\n        isAdjacent: false,\n        fields: [\n          {\n            // label: 'Select Capacity',\n            name: 'contractType',\n            type: 'radio',\n            options: [{ label: 'Lease' }, { label: 'IRU (Indefeasible rights of use)' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n\n      {\n        title: 'Select IRU Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '10 Years' }, { label: '15 Years' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select Lease Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '12 Months' }, { label: '24 Months' }, { label: '36 Months' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n\n      {\n        title: 'Would you like to opt in for SLA Protection?',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'slaProtection',\n            type: 'radio',\n            options: [{ label: 'Yes' }, { label: 'No' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'What are your SLA Requirements?',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Enter you SLA Requirements',\n            name: 'slaRequirements',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n      {\n        title: 'Additional information',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Additional information',\n            name: 'additionalInfo',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n  '/quick-quotes/create-quote/customise-product/dark-fibre': {\n    title: 'Dark Fibre Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Country',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Country',\n            name: 'country',\n            type: 'dropdown',\n            options: countriesWithCities.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Locations (Cities)',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location A',\n            name: 'locationA',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n          {\n            label: 'Select Location B',\n            name: 'locationB',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Fibre Pairs',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'fibrePairs',\n            type: 'radio',\n            options: [{ label: '1' }, { label: '2' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Fibre Required (km)',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'fibreDistance',\n            type: 'numericInteraction',\n            options: [],\n            isOptional: false,\n            dropdownSearch: false,\n            label: 'Enter Required Fibre Distance',\n          },\n        ],\n      },\n      {\n        title: 'Select Contract Type',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractType',\n            type: 'radio',\n            options: [{ label: 'Lease' }, { label: 'IRU (Indefeasible rights of use)' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select IRU Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '10 Years' }, { label: '15 Years' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select Lease Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '12 Months' }, { label: '24 Months' }, { label: '36 Months' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Additional information',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Additional information',\n            name: 'additionalInfo',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n  '/quick-quotes/create-quote/customise-product/l3vpn': {\n    title: 'L3 VPN Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Locations',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location A',\n            name: 'locationA',\n            type: 'dropdown',\n            options: twoVpnCountriesBandwidth.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n          {\n            label: 'Select Location B',\n            name: 'locationB',\n            type: 'dropdown',\n            options: twoVpnCountriesBandwidth.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: l3vpnCapacity,\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Select Contract Type',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractType',\n            type: 'radio',\n            options: [{ label: 'Lease' }, { label: 'IRU (Indefeasible rights of use)' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select IRU Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '10 Years' }, { label: '15 Years' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select Lease Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '12 Months' }, { label: '24 Months' }, { label: '36 Months' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Would you like to opt in for SLA Protection?',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'slaProtection',\n            type: 'radio',\n            options: [{ label: 'Yes' }, { label: 'No' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'What are your SLA Requirements?',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Enter you SLA Requirements',\n            name: 'slaRequirements',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n      {\n        title: 'Additional information',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Additional information',\n            name: 'additionalInfo',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n  '/quick-quotes/create-quote/customise-product/public-cloud-access': {\n    title: 'Public Cloud Access Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Country',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Country',\n            name: 'country',\n            type: 'dropdown',\n            options: allCountries.map((country) => ({\n              label: country.label,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Region',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Region',\n            name: 'region',\n            type: 'dropdown',\n            options: regions.map((region) => ({\n              label: region.label,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Cloud Service Provider',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Cloud Service Provider',\n            name: 'serviceProvider',\n            type: 'dropdown',\n            options: cloudServiceProvider,\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: cloudCapacity.map((capacity) => ({\n              label: capacity.label,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Select Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '12 Months' }, { label: '24 Months' }, { label: '36 Months' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Additional information',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Additional information',\n            name: 'additionalInfo',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n  '/quick-quotes/create-quote/customise-product/nplc': {\n    title: 'NPLC Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Country',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Country',\n            name: 'country',\n            type: 'dropdown',\n            options: countriesWithCities.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Locations (Cities)',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location A',\n            name: 'locationA',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n          {\n            label: 'Select Location B',\n            name: 'locationB',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: nplcCapacity,\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Select Contract Type',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractType',\n            type: 'radio',\n            options: [{ label: 'Lease' }, { label: 'IRU (Indefeasible rights of use)' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select IRU Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '10 Years' }, { label: '15 Years' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'Select Lease Contract Term',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contractTerm',\n            type: 'radio',\n            options: [{ label: '12 Months' }, { label: '24 Months' }, { label: '36 Months' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n\n      {\n        title: 'Would you like to opt in for SLA Protection?',\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'slaProtection',\n            type: 'radio',\n            options: [{ label: 'Yes' }, { label: 'No' }],\n            isOptional: false,\n            dropdownSearch: false,\n            label: '',\n          },\n        ],\n      },\n      {\n        title: 'What are your SLA Requirements?',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Enter you SLA Requirements',\n            name: 'slaRequirements',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n      {\n        title: 'Additional information',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Additional information',\n            name: 'additionalInfo',\n            type: 'textarea',\n            isOptional: true,\n            options: [],\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n  '/quick-quotes/create-quote/customise-product/ipt': {\n    title: 'IP Transit Quote Request',\n    introText: [],\n    formSections: [\n      {\n        title: 'Location',\n        isAdjacent: true,\n        fields: [\n          {\n            label: 'Select Location',\n            name: 'country',\n            type: 'dropdown',\n            options: iptBandwidths.map((country) => ({\n              label: country.country,\n            })),\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'Capacity',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select Capacity',\n            name: 'capacity',\n            type: 'dropdown',\n            options: [],\n            isOptional: false,\n            dropdownSearch: true,\n          },\n        ],\n      },\n      {\n        title: 'IP Transit Service Options',\n        isAdjacent: false,\n        fields: [\n          {\n            label: 'Select IP Transit Service Option',\n            name: 'service',\n            type: 'dropdown',\n            options: Services,\n            isOptional: false,\n            dropdownSearch: false,\n          },\n        ],\n      },\n    ],\n    buttonLabel: 'Submit Request',\n    buttonStatus: true,\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      alert('form data submitted: ' + formData);\n    },\n  },\n};\n\ntype Field = {\n  label?: string;\n  name: string;\n  type: string;\n  options: any[];\n  isOptional: boolean;\n  dropdownSearch: boolean;\n};\n\ntype FormSection = {\n  title: string;\n  isAdjacent?: boolean;\n  isHidden?: boolean;\n  fields: Field[];\n};\n\ntype FormData = {\n  [key: string]: string;\n};\n\ntype Form = {\n  title: string;\n  introText: string[];\n  formSections: FormSection[];\n  buttonLabel: string;\n  buttonStatus: boolean;\n  handleSubmit: (formData: FormData) => void;\n};\n\ntype FormKey =\n  | '/quick-quotes/create-quote/customise-product/iplc'\n  | '/quick-quotes/create-quote/customise-product/dark-fibre'\n  | '/quick-quotes/create-quote/customise-product/l3vpn'\n  | '/quick-quotes/create-quote/customise-product/public-cloud-access'\n  | '/quick-quotes/create-quote/customise-product/nplc'\n  | '/quick-quotes/create-quote/customise-product/ipt';\n\nexport type formTypes = {\n  [key in FormKey]: Form;\n};\n","/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  DashboardWrapper,\n  HeaderWrapper,\n} from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { ContainerWrapper, ProductListContainer } from '../ProductList/ProductList.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { forms } from './NonStandardProductConfigs';\nimport { useLocation } from 'react-router-dom';\nimport { diaCountriesBandwidth } from './DiaFormDataSets';\nimport { iptBandwidths } from './IptFormDataSets';\nimport { twoVpnCountriesBandwidth } from './L2vpnFormDataSets';\nimport { countriesWithCities } from './FormDataSets';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const RequestQuote = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const location = useLocation();\n  const [currentUrl, setCurrentUrl] = useState<keyof typeof forms | undefined>(undefined);\n  const retrievedProfile = sessionStorage.getItem('profile');\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  useEffect(() => {\n    setCurrentUrl(location.pathname.toString() as keyof typeof forms);\n  }, []);\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n    quoteSummary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'name',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Request Quote',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.connectForm || !urls.quoteSummary ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n            <div>\n              <HeaderWrapper>\n                {!loading && (\n                  <FeatureAppLoader\n                    featureAppId='fa-header-dashboard'\n                    src={urls.header}\n                    moduleType=''\n                    config={HeaderData}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Dashboard Header'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                )}\n              </HeaderWrapper>\n\n              <ContainerWrapper>\n                <FeatureAppContainer>\n                  <ProductListContainer>\n                    {currentUrl && retrievedProfile != null ? (\n                      <FeatureAppLoader\n                        featureAppId='fa-customise-product'\n                        src={urls.connectForm}\n                        moduleType=''\n                        config={{\n                          data: currentUrl ? forms[currentUrl] : undefined,\n                          additionalDataSets: {\n                            diaCountriesBandwidth,\n                            twoVpnCountriesBandwidth,\n                            iptBandwidths,\n                            countriesWithCities,\n                          },\n                          userInfo: JSON.parse(retrievedProfile),\n                          currentUrl: currentUrl,\n                        }}\n                        onError={(error: unknown): unknown => error}\n                      >\n                        {({\n                          error,\n                          featureAppNode,\n                        }: CustomFeatureAppRenderingParams): ReactElement => {\n                          return error ? (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              <ErrorUi productName={'Customise Product'} />\n                            </Col>\n                          ) : (\n                            <Col\n                              style={{\n                                // display: loading ? 'none' : 'flex',\n                                flex: '1',\n                                width: '100%',\n                                padding: '0px',\n                              }}\n                              $xs={0}\n                            >\n                              {featureAppNode}\n                            </Col>\n                          );\n                        }}\n                      </FeatureAppLoader>\n                    ) : null}\n                  </ProductListContainer>\n                </FeatureAppContainer>\n\n                <FeatureAppContainer>\n                  <FeatureAppLoader\n                    featureAppId='fa-request-summary'\n                    src={urls.quoteSummary}\n                    moduleType=''\n                    config={{\n                      state: '',\n                      buttonVisibility: false,\n                      dataSets: [],\n                      emailScreen: false,\n                      currentUrl: 'quotes',\n                      request: true,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Quote'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                            position: 'sticky',\n                            top: '0',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </FeatureAppContainer>\n              </ContainerWrapper>\n            </div>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import styled from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const CampaignWrapper = styled.div`\n  @media only screen and (max-width: 1023px) {\n    padding: 0px 40px 40px 40px;\n  }\n\n  /* @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1023px) {\n    padding: 0px 20px 30px 20px;\n  } */\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { CampaignWrapper, FeatureAppContainer } from './Campaigns.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\n\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface CampaignManagementProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  isOpenModal: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst CampaignManagement = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n}: CampaignManagementProps): ReactElement => {\n  const { user } = useAuth0();\n  const [src, setSrc] = useState<string | null>(null);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [name, profile, loading]\n  );\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_CAMPAIGN_MANAGEMENT + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_CAMPAIGN_MANAGEMENT}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {src && profile && (\n        <CampaignWrapper data-testid='message-template-app-container'>\n          <div data-testid='message-template-shell-container'>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-campaign-management'\n                src={src}\n                moduleType=''\n                config={{\n                  state: 'preview campaign',\n                  defaultConfig: defaultConfig,\n                  logout: logoutF,\n                  userImage: user?.picture,\n                  username: name,\n                  isSupueruser: isSupueruser,\n                  profile: profile,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Campaign Management'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </CampaignWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default CampaignManagement;\n","import React, { ReactElement } from 'react';\nimport { AccordionWrap, FaqHeader, SubTitle } from './SupportAndFaqs.style';\nimport { Accordion, AccordionItem } from '@mtnkente/paragon-display';\ninterface FaqProps {\n  knowledgeHub?: boolean;\n}\nconst Faqs = ({ knowledgeHub }: FaqProps): ReactElement => {\n  return (\n    <AccordionWrap style={knowledgeHub && { padding: '0' }}>\n      {!knowledgeHub && <FaqHeader>Frequently Asked Questions</FaqHeader>}\n      <Accordion style={knowledgeHub && { width: '100%' }}>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              How do I sign up for a WhatsApp Business Account?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>\n            To get started, follow these steps in the WhatsApp Business Messaging Portal:\n          </SubTitle>\n          <br />\n          <SubTitle>Navigate to the Overview Tab:</SubTitle>\n          <ul>\n            <li>\n              On the left-hand menu, click &ldquo;<strong>Overview</strong>&ldquo; and select the{' '}\n              <strong>“Get Started”</strong> button to begin the embedded sign-up process.\n            </li>\n          </ul>\n          <SubTitle>Complete the Sign-up Steps:</SubTitle>\n          <ul>\n            <li>\n              <strong>Choose a Display Name:</strong> Select a name for your WhatsApp Business\n              Account. This can differ from your legal business name but must comply with{' '}\n              <a\n                href='https://www.facebook.com/business/help/757569725593362'\n                style={{ color: '#334051' }}\n              >\n                Meta&lsquo;s naming policies\n              </a>\n              .\n            </li>\n            <li>\n              <strong>Select a Phone Number:</strong> Choose a phone number not already registered\n              on WhatsApp (mobile or landline). Ensure this number will be dedicated to business\n              use.\n            </li>\n            <li>\n              <strong>Accept Terms of Service:</strong> Review and agree to both{' '}\n              <a\n                href='https://www.whatsapp.com/legal/business-terms?fbclid=IwY2xjawF8qGRleHRuA2FlbQIxMAABHRQbfOJPh2dNT5FSkz1o9Sy-kzIEO30C4QuWAwh3BYJxGeiyFaa20sw56A_aem_Bew1mLr3n9ya3Cb9C4Ym4Q'\n                style={{ color: '#334051' }}\n              >\n                WhatsApp&lsquo;s Business Terms of Service\n              </a>{' '}\n              and our BSP Terms of Service.\n            </li>\n            <li>\n              <strong>Submit Your Application:</strong> After completing all steps, submit your\n              application for <strong>Meta&lsquo;s approval.</strong> Approval typically takes a few\n              days. Once approved, you&lsquo;ll receive a confirmation to start managing your\n              account.\n            </li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              What are the requirements for creating a WhatsApp Business Account?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>To create a WhatsApp Business Account, you need:</SubTitle>\n          <br />\n          <ul>\n            <li>A registered business name </li>\n            <li>A website or app for your business</li>\n            <li>A business email address</li>\n            <li>A phone number that hasn&lsquo;t been used for WhatsApp before</li>\n            <li>Compliance with WhatsApp&lsquo;s Business Policy</li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              What is a WhatsApp Message Template, and why do I need it?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>\n            A WhatsApp Message Template is a pre-approved message format used for business-initiated\n            conversations.\n          </SubTitle>\n          <br />\n          <SubTitle>Components of a Template:</SubTitle>\n          <ul>\n            <li>Header: Text, image, video, or document (optional)</li>\n            <li>Body: Main message content (required)</li>\n            <li>Footer: Additional information or disclaimer (optional)</li>\n            <li>Buttons: Call-to-action buttons(optional, up to 3)</li>\n          </ul>\n          <br />\n          <SubTitle>Variables</SubTitle>\n          <ul>\n            <li>Placeholders for personalized information (e.g., customer name, order number)</li>\n            <li>\n              Denoted by &#123;&#123;1&#125;&#125;, &#123;&#123;2&#125;&#125;, etc., in the template\n            </li>\n          </ul>\n          <br />\n          <SubTitle>Limitations:</SubTitle>\n          <ul>\n            <li>Cannot be edited once approved (new submission required for changes)</li>\n            <li>Must adhere strictly to the approved format when sending</li>\n            <li>Some industries may have restrictions on template types or content</li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              How do I create and submit a WhatsApp message template for approval?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>To create and submit a template:</SubTitle>\n          <br />\n          <ul>\n            <li>\n              <strong>Go to Template Management:</strong> Open the &ldquo;Message Templates&ldquo;\n              section from your dashboard.\n            </li>\n            <li>\n              <strong>Create a New Template:</strong> Click &ldquo;Create Template&ldquo; and choose\n              the appropriate type (e.g., Marketing, Utility).\n            </li>\n            <li>\n              <strong>Write Your Message:</strong> Follow WhatsApp&lsquo;s guidelines to ensure\n              approval—keep it clear and compliant.\n            </li>\n            <li>\n              <strong>Add Optional Elements:</strong> Attach media or interactive buttons if\n              needed.{' '}\n            </li>\n            <li>\n              <strong>Submit for Approval:</strong> Once done, submit your template. Approval\n              usually takes minutes to 48 hours.\n            </li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              What is a WhatsApp Campaign, and how do I create one?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>\n            A WhatsApp Campaign allows businesses to send messages to a targeted group of customers\n            for purposes like marketing promotions. Here&lsquo;s a quick guide to creating one:\n          </SubTitle>\n          <br />\n          <ul>\n            <li>\n              <strong>Access Campaign Management:</strong> Go to the &ldquo;Campaigns&ldquo; section\n              on your dashboard.\n            </li>\n            <li>\n              <strong>Create a New Campaign:</strong> Click &ldquo;Create Campaign &ldquo; to get\n              started.\n            </li>\n            <li>\n              <strong>Select Your Audience:</strong> Choose your target audience.\n            </li>\n            <li>\n              <strong>Use Approved Templates:</strong> Choose the approved template you want to use.\n            </li>\n            <li>\n              <strong>Schedule or Launch:</strong> Set a campaign schedule, or send it immediately\n              once reviewed.\n            </li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              How do I ensure my campaigns comply with WhatsApp&lsquo;s messaging policies?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>To comply with WhatsApp&lsquo;s policies:</SubTitle>\n          <br />\n          <ul>\n            <li>Use approved templates for business-initiated messages</li>\n            <li>Respect customer opt-outs </li>\n            <li>Maintain high-quality, relevant content</li>\n            <li>Adhere to frequency limits </li>\n            <li>Don&lsquo;t send spam or prohibited content</li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              How do I create a new WhatsApp Business Account (WABA) for my business?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>To create a new WABA:</SubTitle>\n          <br />\n          <ul>\n            <li>Visit the official Meta Business Manager website (business.facebook.com)</li>\n            <li>Click on &ldquo;Create Account&ldquo; and follow the embedded sign-up flow</li>\n            <li>Complete the business verification process as prompted </li>\n            <li>Once verified, select &ldquo;WhatsApp&ldquo; from the available business tools</li>\n            <li>Follow the steps to set up your WABA</li>\n          </ul>\n          <br />\n          Note: New WABAs cannot be created directly through our BSP portal. The embedded Meta\n          sign-up flow ensures compliance with all necessary verification steps.\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>What is a Sender Profile in WhatsApp Business?</p>\n          }\n          value='item-1'\n        >\n          <SubTitle>\n            A Sender Profile represents a specific phone number or business identity within your\n            WABA. It includes:\n          </SubTitle>\n          <br />\n          <ul>\n            <li>The phone number used to send messages </li>\n            <li>Display name shown to customers </li>\n            <li> Business profile information (description, address, website, etc.)</li>\n          </ul>\n          <br />\n          Each WABA can have multiple Sender Profiles, allowing you to manage different business\n          lines or departments.\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={<p style={{ whiteSpace: 'normal' }}>Who owns the WhatsApp Business Account?</p>}\n          value='item-1'\n        >\n          A business owns their own WhatsApp Business Account (WABA) and will see it in their\n          Business Manager. Access to that WABA will automatically be shared with the Solution\n          Partner, through whose website they signed up, upon completion of the Embedded Signup\n          flow. The business does not have to take any action to add the Solution Partner to the\n          WABA.\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>\n              What happens after a business completes the Embedded Signup flow?\n            </p>\n          }\n          value='item-1'\n        >\n          <SubTitle>For Solution Partner:</SubTitle>\n          When a business successfully finishes the Embedded Signup flow, a Facebook Login callback\n          is sent. The Solution Partner can query for newly shared WhatsApp Business Accounts\n          accounts and download the certificate. The business&lsquo;s WhatsApp Business Account is\n          also be shared with the Solution Partner. Solution Partner should also support businesses\n          through the process of business verification, ensuring they understand the process and are\n          able to provide the right documentation.\n          <br />\n          <br />\n          <SubTitle>For Businesses:</SubTitle>\n          Once the signup flow is complete and all the business profile information is captured, the\n          certificate will be available for download. Businesses can respond to unlimited\n          customer-initiated conversations (24-hour messaging windows) and send business-initiated\n          conversations to 50 unique customers in a rolling 24-hour period. Businesses should\n          initiate business verification when they are ready to scale business-initiated\n          conversations, add additional phone numbers, or request to become an Official Business\n          Account.\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={<p style={{ whiteSpace: 'normal' }}>What does it mean to become a Customer?</p>}\n          value='item-1'\n        >\n          <SubTitle>\n            Becoming a Customer means signing up to use our WhatsApp Business services for your\n            business. As a Customer, you can:\n          </SubTitle>\n          <br />\n          <ul>\n            <li>Send messages to your customers via WhatsApp </li>\n            <li>Create marketing campaigns</li>\n            <li>Integrate WhatsApp messaging into your business processes </li>\n            <li> Access analytics and reporting tools</li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n      <Accordion>\n        <AccordionItem\n          title={\n            <p style={{ whiteSpace: 'normal' }}>What are the requirements to become a Customer?</p>\n          }\n          value='item-1'\n        >\n          <SubTitle>To become a Customer, you need to:</SubTitle>\n          <br />\n          <ul>\n            <li> Have a registered business entity </li>\n            <li> Provide a valid business phone number </li>\n            <li> Have a business website or app </li>\n            <li> Agree to WhatsApp&lsquo;s Business Policy and our terms of service</li>\n            <li> Pass Meta&lsquo;s business verification process</li>\n          </ul>\n        </AccordionItem>\n      </Accordion>\n    </AccordionWrap>\n  );\n};\n\nexport default Faqs;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { DashboardWrapper, FeatureAppContainer, HeaderWrapper } from './SupportAndFaqs.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport Faqs from './Faqs';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface SupportAndFaqProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nconst SupportAndFaqs = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n}: SupportAndFaqProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loadingNot, setloadingNot] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setloadingNot(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setloadingNot(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setloadingNot(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    supportTicket: process.env.REACT_APP_SUPPORT_TICKET_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Support & FAQs',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loadingNot, profile]\n  );\n\n  // const Data = {\n  //   themeMode: 'light',\n  //   title: 'Need Help? Log a Ticket',\n  //   bodyText:\n  //     'Need help with something specific? Log a support ticket to get assistance from our dedicated team. Provide details about your issue or request, and we’ll ensure it’s addressed promptly.',\n  //   img: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/log support ticket.jpg',\n  //   backgroundImg: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/top-graphic@2x.png',\n  //   url: process.env.REACT_APP_LOG_SUPPORT_URL,\n  // };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.supportTicket ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loadingNot && (\n                <FeatureAppLoader\n                  featureAppId='fa-support-and-faq-header'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Whatsapp BSP Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-log-support-and-faq'\n                src={urls.supportTicket}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n            <Faqs />\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default SupportAndFaqs;\n","import styled from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { css } from 'styled-components';\n\nexport const container = css`\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n`;\n\nexport const circle = css`\n  display: inline-block;\n  position: relative;\n  flex-shrink: 0;\n  width: 0.5rem;\n  min-width: 0.5rem;\n  min-height: 0.5rem;\n  aspect-ratio: 1/1;\n  border-radius: 50%;\n  vertical-align: middle;\n`;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { styled, DefaultTheme, css } from 'styled-components';\nimport { circle, container } from './styles/shared-styles';\n\nexport const StyledStatusIndicatorContainer = styled.div`\n  ${container}\n`;\n\nexport const StyledInstance = styled.div`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    display: inline-flex;\n    height: 38px;\n    align-items: center;\n    gap: ${theme.floats['margin-xsmall']};\n    flex-shrink: 0;\n  `}\n`;\n\nexport const StyledStatusIndicator = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    svg {\n      width: ${theme.floats['scale-12']};\n      height: ${theme.floats['scale-12']};\n    }\n  `}\n`;\n\nexport const StyledCircleSuccess = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-success']};\n    background-color: ${theme.colors['colour-success']};\n  `}\n`;\n\nexport const StyledCircleInformative = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-informative']};\n    background-color: ${theme.colors['colour-informative']};\n  `}\n`;\n\nexport const StyledCircleError = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-error']};\n    background-color: ${theme.colors['colour-error']};\n  `}\n`;\n\nexport const StyledCircleWarning = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-warning']};\n    background-color: ${theme.colors['colour-warning']};\n  `}\n`;\n\nexport const StyledCirclePaused = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-surface-subtle-primary']};\n    background-color: ${theme.colors['colour-surface-subtle-primary']};\n  `}\n`;\n\nexport const StyledCircleDisabled = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['colour-disabled']};\n    background-color: ${theme.colors['colour-disabled']};\n  `}\n`;\n\nexport const StyledCircleDraft = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    ${circle}\n    border: 1px solid ${theme.colors['border-colour-tertiary']};\n  `}\n`;\n\nexport const StyledCaption = styled.span`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    display: flex;\n    align-items: flex-start;\n    gap: 10px;\n    color: ${theme.colors['text-embed-text-colour-tertiary']};\n    ${theme.typography['caption-regular']};\n  `}\n`;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { styled, DefaultTheme, css } from 'styled-components';\n\nexport const StyledHeader = styled.div`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    @media (max-width: 1024px) {\n      display: flex;\n      padding-bottom: ${theme.floats['padding-medium']};\n      align-items: center;\n      gap: ${theme.floats['margin-large']};\n      align-self: stretch;\n      justify-content: flex-start;\n    }\n  `}\n`;\n\nexport const StyledButtonContainer = styled.div`\n  ${({ theme }: DefaultTheme): DefaultTheme => css`\n    display: flex;\n    justify-content: flex-start;\n    padding-bottom: ${theme.floats['padding-medium']};\n    @media (max-width: 1023px) {\n      margin-bottom: ${theme.floats['margin-medium']};\n    }\n  `}\n`;\n","type ThemeMode = 'light' | 'dark';\n\nexport const Data: {\n  themeMode: ThemeMode;\n  displayNameTitle: string;\n  phoneNumberTitle: string;\n  qualityRatingTitle: string;\n  mtnSaLabel: string;\n  mtnContractsLabel: string;\n  mtnMarketingLabel: string;\n  qualityRatingHigh?: string;\n  qualityRatingMedium?: string;\n  qualityRatingLow?: string;\n} = {\n  themeMode: 'light',\n  displayNameTitle: 'Display Name',\n  phoneNumberTitle: 'Phone Number',\n  qualityRatingTitle: 'Quality Rating',\n  mtnSaLabel: 'MTN SA',\n  mtnContractsLabel: 'MTN Contracts',\n  mtnMarketingLabel: 'MTN Marketing',\n  qualityRatingHigh: 'High',\n  qualityRatingMedium: 'Medium',\n  qualityRatingLow: 'Low',\n};\n\nexport const config = {\n  themeMode: Data.themeMode,\n  displayNameTitle: Data.displayNameTitle,\n  phoneNumberTitle: Data.phoneNumberTitle,\n  qualityRatingTitle: Data.qualityRatingTitle,\n  mtnSaLabel: Data.mtnSaLabel,\n  mtnContractsLabel: Data.mtnContractsLabel,\n  mtnMarketingLabel: Data.mtnMarketingLabel,\n  qualityRatingHigh: Data.qualityRatingHigh,\n  qualityRatingLow: Data.qualityRatingLow,\n  qualityRatingMedium: Data.qualityRatingMedium,\n};\n\nconst modalData = {\n  result: true,\n  title: 'Whatsapp BSP',\n  content:\n    'https://www.facebook.com/login.php?skip_api_login=1&api_key=2091634797853234&kid_directed_site=0&app_id=2091634797853234&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv20.0%2Fdialog%2Foauth%3Fapp_id%3D2091634797853234%26cbt%3D1725874060812%26channel_url%3Dhttps%253A%252F%252Fstaticxx.facebook.com%252Fx%252Fconnect%252Fxd_arbiter%252F%253Fversion%253D46%2523cb%253Dfcccba0533ef9e8fd%2526domain%253Dprismatic-ganache-34e885.netlify.app%2526is_canvas%253Dfalse%2526origin%253Dhttps%25253A%25252F%25252Fprismatic-ganache-34e885.netlify.app%25252Ffd542f70b0a2d350d%2526relation%253Dopener%26client_id%3D2091634797853234%26config_id%3D1020428312820058%26display%3Dpopup%26domain%3Dprismatic-ganache-34e885.netlify.app%26e2e%3D%257B%257D%26extras%3D%257B%2522setup%2522%253A%257B%257D%257D%26fallback_redirect_uri%3Dhttps%253A%252F%252Fprismatic-ganache-34e885.netlify.app%252F%26locale%3Den_US%26logger_id%3Df794b97c5f65af954%26origin%3D1%26override_default_response_type%3Dtrue%26redirect_uri%3Dhttps%253A%252F%252Fstaticxx.facebook.com%252Fx%252Fconnect%252Fxd_arbiter%252F%253Fversion%253D46%2523cb%253Dfec5f26fff215d277%2526domain%253Dprismatic-ganache-34e885.netlify.app%2526is_canvas%253Dfalse%2526origin%253Dhttps%25253A%25252F%25252Fprismatic-ganache-34e885.netlify.app%25252Ffd542f70b0a2d350d%2526relation%253Dopener%2526frame%253Df2e52f26b0c1add6f%26response_type%3Dcode%26sdk%3Djoey%26version%3Dv20.0%26ret%3Dlogin%26fbapp_pres%3D0%26tp%3Dunspecified&cancel_url=https%3A%2F%2Fstaticxx.facebook.com%2Fx%2Fconnect%2Fxd_arbiter%2F%3Fversion%3D46%23cb%3Dfec5f26fff215d277%26domain%3Dprismatic-ganache-34e885.netlify.app%26is_canvas%3Dfalse%26origin%3Dhttps%253A%252F%252Fprismatic-ganache-34e885.netlify.app%252Ffd542f70b0a2d350d%26relation%3Dopener%26frame%3Df2e52f26b0c1add6f%26error%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied&display=popup&locale=en_GB&pl_dbl=0',\n};\n\nexport const modalConfig = {\n  result: modalData.result,\n  title: modalData.title,\n  content: modalData.content,\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { ReactElement, useState } from 'react';\nimport { PlusWithCircle } from '@mtnkente/paragon-icons';\nimport { StyledButtonContainer, StyledHeader } from './AccountManagementHeader.styles';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Col } from '@mtnkente/paragon-foundation';\nimport ErrorUi from '../../../../../ErrorUI/ErrorUI';\nimport { modalConfig } from '../AccountManagementConfig';\nimport { useFeatureAppUrls } from '../../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../../Loading/Loading';\n\ninterface ModalProps {\n  openModal: () => void;\n  closeModal: () => void;\n}\n\nconst Modal = ({ closeModal }: ModalProps): JSX.Element => {\n  const envs = {\n    headerAccountManagement: process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.headerAccountManagement) {\n    return <Loading isLoading={true} />;\n  }\n\n  return (\n    <FeatureAppLoader\n      featureAppId='fa-bayobab-modal'\n      src={urls.headerAccountManagement}\n      moduleType=''\n      config={{\n        result: modalConfig.result,\n        title: modalConfig.title,\n        content: modalConfig.content,\n        close: closeModal,\n      }}\n      onError={(error: unknown): unknown => error}\n    >\n      {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n        return error ? (\n          <Col\n            style={{\n              flex: '1',\n              width: '100%',\n              padding: '0px',\n            }}\n            $xs={0}\n          >\n            <ErrorUi productName={'Modal'} />\n          </Col>\n        ) : (\n          <Col\n            style={{\n              flex: '1',\n              width: '100%',\n              padding: '0px',\n            }}\n            $xs={0}\n          >\n            {featureAppNode}\n          </Col>\n        );\n      }}\n    </FeatureAppLoader>\n  );\n};\n\nconst AccountManagementHeader = () => {\n  const [isDesktop, setisDesktop] = React.useState(window.innerWidth >= 1024);\n\n  React.useEffect(() => {\n    const handleResize = () => setisDesktop(window.innerWidth >= 1024);\n    window.addEventListener('resize', handleResize);\n    return () => window.removeEventListener('resize', handleResize);\n  }, []);\n\n  const [isOpen, setIsOpen] = useState(false);\n\n  const openModal = (): void => setIsOpen(true);\n  const closeModal = (): void => setIsOpen(false);\n\n  return (\n    <>\n      {isOpen && <Modal closeModal={closeModal} />}\n      <StyledHeader>\n        <StyledButtonContainer>\n          <StandardButton\n            data-testid='add new'\n            label='Add New'\n            $variant='primary'\n            icon={<PlusWithCircle />}\n            $isFullWidth={!isDesktop}\n            onClick={openModal}\n          />\n        </StyledButtonContainer>\n      </StyledHeader>\n    </>\n  );\n};\n\nexport default AccountManagementHeader;\n","/* eslint-disable   @typescript-eslint/explicit-function-return-type */\n/* eslint-disable   @typescript-eslint/explicit-module-boundary-types */\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserSymbol, UserGroup } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { DashboardWrapper, FeatureAppContainer, HeaderWrapper } from './AccountManagement.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport {\n  StyledCircleDisabled,\n  StyledCircleInformative,\n  StyledCircleWarning,\n  StyledCircleSuccess,\n} from './StatusIndicatorMessage/StatusIndicator.styles';\nimport { SouthAfrica, Uganda, Nigeria, Ghana } from '@mtnkente/paragon-icons-flags';\nimport AccountManagementHeader from './AccountManagmentHeader/AccountManagementHeader';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\n\ninterface AccountManagementProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst AccountManagement = ({ name, profile, isSupueruser, logoutF }: AccountManagementProps) => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    accountManagement: process.env.REACT_APP_FA_ACCOUNT_MANAGEMENT ?? '',\n    // businessVerification: process.env.REACT_APP_IP_PORTAL_PROFILE_HEADER ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.header || !urls.accountManagement) {\n    return <div />;\n  }\n\n  const HeaderData = {\n    username: name,\n    fullName: profile?.fullName,\n    emailAddress: profile?.emailAddress,\n    companyDetails: profile?.companyDetails?.name,\n    isSupueruser: isSupueruser,\n    img: user?.picture,\n    themeMode: 'light',\n    myProfileText: 'My Profile',\n    logoutText: 'Logout',\n    viewType: 'overview',\n    upcomingServicesText: '',\n    supportTicketText: '',\n    feedbackText: '',\n    overviewText: 'Account Management',\n    title: 'Post Login',\n    ThemeProvider: 'theme',\n    imgProfileRailMenuItems: [\n      {\n        id: '1',\n        label: 'View Profile',\n        icon: <UserSymbol />,\n        redirectUrl: '/profile',\n        activeTab: '',\n      },\n      // {\n      //   id: '2',\n      //   label: 'Notification Preferences',\n      //   icon: <Notification />,\n      //   redirectUrl: '/notification',\n      //   activeTab: '',\n      // },\n    ],\n    company: [\n      {\n        id: '1',\n        label: 'User Management',\n        icon: <UserGroup />,\n        redirectUrl: '/user-management',\n        activeTab: '',\n      },\n    ],\n    logOutState: [\n      {\n        id: '1',\n        label: 'Logout',\n        icon: <Logout />,\n        redirectUrl: '/',\n        activeTab: '',\n      },\n    ],\n    alertStatus: checkUnreadNotifications(notifications),\n\n    notifications: {\n      type: 'notifications-centre',\n      handleDelete: (): void => {},\n      handleUpdate: (): void => {},\n      markallread: handleAllUpdate,\n      notifications: notifications,\n    },\n\n    login: logoutF,\n  };\n\n  const Tableheaders = ['Display Name', 'Phone Number', 'Quality Rating'];\n\n  const ActionButton = <AccountManagementHeader />;\n\n  const TableData = [\n    {\n      displayName: 'MTN SA',\n      phoneNumber: [<SouthAfrica key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleSuccess key='icon' />, 'High'],\n    },\n    {\n      displayName: 'MTN Marketing',\n      phoneNumber: [<SouthAfrica key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleInformative key='icon' />, 'Medium'],\n    },\n    {\n      displayName: 'MTN Contracts',\n      phoneNumber: [<Uganda key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleWarning key='icon' />, 'Low'],\n    },\n    {\n      displayName: 'MTN Contracts',\n      phoneNumber: [<SouthAfrica key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleDisabled key='icon' />, 'Unavailable'],\n    },\n    {\n      displayName: 'MTN Marketing',\n      phoneNumber: [<Nigeria key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleWarning key='icon' />, 'Low'],\n    },\n    {\n      displayName: 'MTN Contracts',\n      phoneNumber: [<SouthAfrica key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleInformative key='icon' />, 'Medium'],\n    },\n    {\n      displayName: 'MTN Contracts',\n      phoneNumber: [<Ghana key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleSuccess key='icon' />, 'High'],\n    },\n    {\n      displayName: 'MTN Contracts',\n      phoneNumber: [<SouthAfrica key='icon' />, '+27 888888888'],\n      statusCaption: [<StyledCircleSuccess key='icon' />, 'High'],\n    },\n  ];\n\n  // const profileContent = {\n  //   isBusinessVerificationWBSP: true,\n  //   businessVerificationData: {\n  //     businessName:\n  //       (profile?.companyDetails?.name ?? sessionStorage?.getItem('profile'))\n  //         ? JSON.parse(sessionStorage.getItem('profile') as string)?.companyDetails?.name\n  //         : 'MTN Africa',\n  //     bPortfolioID: '983423999838',\n  //   },\n  //   profileBanner: {\n  //     headerImage:\n  //       'https://customer-portal-dev.bayobab.africa/assets/Dashboard/banner/profile-header.jpg',\n  //     name: profile?.fullName ?? '',\n  //     contact: profile?.contactNumber ?? '',\n  //     email: profile?.emailAddress ?? '',\n  //     jobTitle: profile?.role ?? '',\n  //     image: user?.picture,\n  //   },\n  //   profileCards: [\n  //     {\n  //       title: 'Company Credentials',\n  //       isTag: false,\n  //       children: [\n  //         ['Company Name', profile?.companyDetails?.name ?? ''],\n  //         [\n  //           'Company Address',\n  //           `${profile?.companyDetails?.address?.countryCode}, ${profile?.companyDetails?.address?.country}`,\n  //         ],\n  //         ['Website URL', profile?.companyDetails?.website ?? ''],\n  //       ],\n  //     },\n  //     {\n  //       title: 'Communication Preferences',\n  //       isTag: false,\n  //       children: [\n  //         ['Language', profile?.language ?? ''],\n  //         ['Currency', profile?.currency ?? ''],\n  //       ],\n  //     },\n  //     {\n  //       title: 'Active Services',\n  //       isTag: true,\n  //       children: profile?.activeServices ?? [],\n  //     },\n  //   ],\n\n  //   clickHandler: logoutF,\n  // };\n  //     {\n  //       name: 'Display Name',\n  //       status: 'Sent',\n  //       lastModified: '01 June 2024',\n  //       totalRecipients: '500',\n  //       sent: '450',\n  //       delivered: '400',\n  //     },\n  //     {\n  //       name: 'Display Name',\n  //       status: 'Draft',\n  //       lastModified: '01 June 2024',\n  //       totalRecipients: '500',\n  //       sent: '750',\n  //       delivered: '650',\n  //     },\n  //     {\n  //       name: 'April_Upgrades',\n  //       status: 'Sent',\n  //       lastModified: '04 June 2024',\n  //       totalRecipients: '1000',\n  //       sent: '800',\n  //       delivered: '900',\n  //     },\n  //     {\n  //       name: 'Display Name',\n  //       status: 'Draft',\n  //       lastModified: '01 June 2024',\n  //       totalRecipients: '500',\n  //       sent: '450',\n  //       delivered: '400',\n  //     },\n  //     {\n  //       name: 'April_Upgrades',\n  //       status: 'Sent',\n  //       lastModified: '04 June 2024',\n  //       totalRecipients: '1000',\n  //       sent: '800',\n  //       delivered: '900',\n  //     },\n  //     {\n  //       name: 'Display Name',\n  //       status: 'Draft',\n  //       lastModified: '01 June 2024',\n  //       totalRecipients: '500',\n  //       sent: '450',\n  //       delivered: '400',\n  //     },\n  //     {\n  //       name: 'April_Upgrades',\n  //       status: 'Sent',\n  //       lastModified: '04 June 2024',\n  //       totalRecipients: '1000',\n  //       sent: '800',\n  //       delivered: '900',\n  //     },\n  //   ],\n  // };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='message-template-app-container'>\n        <div data-testid='message-template-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-account-management-header'\n                src={urls.header}\n                moduleType=''\n                config={HeaderData}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Message Template Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          {/* <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-profile-header'\n              src={urls.businessVerification}\n              moduleType=''\n              config={{\n                profileData: profileContent,\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Account Management'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer> */}\n          <FeatureAppContainer>\n            <FeatureAppLoader\n              featureAppId='fa-account-management'\n              src={urls.accountManagement}\n              moduleType=''\n              config={{\n                themeMode: 'light',\n                actionButton: ActionButton,\n                tableHeaders: Tableheaders,\n                tableData: TableData,\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Account Management'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </FeatureAppContainer>\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default AccountManagement;\n","import { Link } from 'react-router-dom';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  tablet2: '1024px',\n  desktop: '1200px',\n};\n\nexport const AppContainer = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      border-radius: 24px;\n      background: #fff;\n      padding: 80px 90px;\n      color: #44536a;\n      ${typography['body-small-regular']}\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 40px 24px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 40px 24px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 40px 24px;\n      }\n    `;\n  }}\n`;\n\nexport const Heading = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      color: #44536a;\n      ${typography['body-small-semibold']}\n    `;\n  }}\n`;\n\nexport const ClickableLink = styled(Link)`\n  color: #44536a; /* Custom link color */\n  text-decoration: none;\n  word-break: break-word;\n\n  &:hover {\n    text-decoration: underline; /* Add underline on hover */\n  }\n`;\n\n// export const SubHeading = styled.span`\n//   ${({ theme: { typography } }): DefaultTheme => {\n//     return css`\n//       color: #44536a;\n//       ${typography['body-small-semibold']}\n//     `;\n//   }}\n// `;\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 100px;\n    `;\n  }}\n`;\n\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 24px;\n      padding-bottom: 35px;\n    `;\n  }}\n`;\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      @media (min-width: ${breakpoints.desktop}) {\n        padding: 0 176px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  AppContainer,\n  BannerContainer,\n  ClickableLink,\n  Heading,\n  MainContainer,\n  Peering,\n} from './Terms.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\n\nconst Terms: React.FC = (): ReactElement => {\n  const PeeringInformation = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Legal',\n    title: 'Terms of Use',\n    bodyText: '',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + 'fa-main/asset-manifest.json',\n        { cache: 'no-cache' }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_DYNAMIC_BANNER_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <MainContainer>\n        <BannerContainer>\n          <FeatureAppLoader\n            featureAppId='fa-bayobab-terms-banner'\n            src={src}\n            moduleType=''\n            config={{\n              bannerData: PeeringInformation,\n            }}\n            onError={(error: unknown): unknown => error}\n          >\n            {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Banner'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        </BannerContainer>\n        <Peering>\n          <AppContainer>\n            These Terms of Use (“Terms”) are made available to you by MTN GlobalConnect Solutions\n            Limited (Trading as Bayobab Solutions). The Terms govern your access to and use of our\n            client portal, <strong>Bayobab Central</strong> (the ”Portal”) including any content,\n            functionality and services offered on or through the Portal and affects your legal\n            rights and obligations with respect to your use of the Portal, accessing and managing\n            your account and the purchase of Services through the Portal.\n            <br /> “you” or “your” means the person or company who is authorised by us to use the\n            Portal to access your account to manage your Services, including, without limitation,\n            upgrade or modification of existing Services, purchase of new or additional Services\n            <br />\n            “Bayobab”, “we”, “our” and “us” means MTN GlobalConnect Solutions Limited (Trading as\n            Bayobab Solutions) its subsidiaries and affiliated companies. <br /> <br />{' '}\n            <Heading>1. Definitions</Heading> 1.1 Capitalized terms in these Terms of Use will have\n            the following meanings: <br /> <br /> <strong>“Intellectual Property”</strong> means,\n            collectively, the patents, copyrights (and moral rights), Trade Marks, designs, models,\n            brands, names, trade names, graphics, icons, hyperlinks, Know-How, trade secrets and any\n            other type of intellectual property (whether registered or unregistered including\n            applications for and rights to obtain or use same) which are owned by, licensed to, used\n            and/or held (whether or not currently) by Bayobab.. <br /> <br />{' '}\n            <strong> “Know-How”</strong> means all the ideas, designs, documents, diagrams,\n            information, devices, technical and scientific data, secrets and other processes and\n            methods used by us, as well as all available information regarding marketing and\n            promotion of our Services as well as all and any modifications or improvements to any of\n            them. <br /> <br /> <strong>“Material(s)”</strong> means the contents of the Portal\n            including without limitation, all and any information, data, documents, Intellectual\n            Property, material, products (including software) or services contained in, accessed\n            through, or downloaded or obtained from this Portal. <br /> <br />{' '}\n            <strong> “Services”</strong> means the products and services offered by us for your use\n            and/or purchase, which may be accessed via the Portal. <br /> <br />{' '}\n            <strong>“Service Agreement”</strong> means the existing formal agreement between you and\n            us which governs the terms and conditions for purchase and use of the Services <br />{' '}\n            <br /> <strong> “Trademarks”</strong> means those trademarks owned by Bayobab and any\n            other trademarks, designs, logos, style names, and slogans which Bayobab owns or has the\n            right to use or any derivative service offerings of, and applications for, any of the\n            same. <br /> <br /> 1.2 Other capitalized terms have the meanings defined herein. <br />{' '}\n            <br /> <Heading>2. Acceptance of Terms of Use-Warranty of Capacity to Contract</Heading>{' '}\n            You hereby represent and warrant to Bayobab that you have the required legal capacity to\n            form a binding contract with us. If you are uncertain about your legal capacity to enter\n            contracts, please seek assistance to clarify this before proceeding to use the Portal.\n            If you do not agree with any of the provisions in these Terms, you must discontinue\n            using or accessing the Portal immediately. <br /> <br />{' '}\n            <Heading>3. Modification of Terms</Heading> Bayobab reserves the right, in its sole\n            discretion, to amend (including without limitation, by the addition of new terms and\n            conditions) these Terms at any time and from time to time without notice to you. Any\n            such amendments shall come into effect immediately and automatically. You undertake to\n            review these Terms regularly prior to use of the Portal for any such amendments. <br />{' '}\n            <br /> <Heading>4. Scope of Permitted Use</Heading> 4.1 Scope- These Terms set out the\n            terms and conditions of your use of the Portal. Any use of the Services by you through\n            the Portal, or rights and obligations between you and us relating to the Services, are\n            governed by your Service Agreement with us. <br />\n            <br /> 4.2 You may not use the Portal for any illegal or unlawful purposes or as\n            prohibited by these Terms. <br />\n            <br /> 4.3 You may not link to any page on the Portal or frame the Portal or any of the\n            pages on the Portal in any way whatsoever without the prior written permission of\n            Bayobab. Recognizing the global nature of the Internet, you agree to comply with all\n            applicable local laws, rules, and regulations regarding online conduct. <br />\n            <br /> 4.4 You may not transfer any of your rights or obligations in these Terms to any\n            other person or entity. <br />\n            <br /> 4.5 Intent- Your use of the Portal includes the authority to make transactions\n            electronically and manage your Services . You acknowledge that the Portal and/or\n            Services are used for enterprise commercial use, and not for personal, domestic,\n            individual or household use. You acknowledge that your electronic submissions constitute\n            your consent and your intent to be bound by all transactions you enter into through the\n            Portal, including notices of cancellation, policies, contracts, and applications. To\n            access and retain your electronic records, you may be required to have certain hardware\n            and software, which is your sole responsibility. <br />\n            <br /> 4.6 Authority. As a registered user of the Portal, you will receive credentials\n            to access your account (“Account“). You are solely responsible for maintaining the\n            confidentiality and security of your Account, devices and the network and for all\n            activities that occur on or through your Account, and you agree to immediately notify us\n            of any security breach of, or unauthorized use of your Account. We shall not be\n            responsible for any losses arising out of the unauthorized use of your Account. <br />\n            <br /> 4.6.1 Information Accuracy. You are responsible for ensuring that all information\n            you provide to us is complete, accurate, and informing us of any changes to the\n            information you have provided. You must not submit any information about any third\n            parties without their prior written consent. By submitting information about any third\n            parties, you agree to ensure and guarantee that such third party(ies) will comply with\n            these Terms. <br />\n            <br /> 4.6.2 Compelled Disclosure. We may disclose your information (including\n            confidential information) pursuant to a judicial or governmental request, requirement or\n            order, where lawfully required by such authorized institutions. We shall, however, to\n            the extent legally permissible, give you sufficient prior notice to contest such\n            request, requirement or order and disclose strictly only that part of information that\n            has been requested. <br /> <br /> <Heading>\n              {' '}\n              5. Dealings with third parties{' '}\n            </Heading>{' '}\n            Your interaction, correspondence or business dealings with third parties which are\n            referred to or linked to or from Bayobab Central are entirely at your own risk and are\n            solely between you and such third parties including the acquisition, disposal, payment\n            and delivery of any goods or services, and any terms, conditions, warranties or\n            representations associated with such interaction, correspondence or business dealings.\n            You are solely responsible for identifying and familiarising yourself with any terms and\n            conditions which will govern your relationship with such third parties. You agree that\n            You will not use any third-party materials in a manner that would infringe or violate\n            the rights of any other party. Bayobab shall not be responsible or liable for any\n            damage, damages or losses caused or alleged to be caused by or in connection with your\n            interaction, correspondence or business dealings with such third parties. <br /> <br />{' '}\n            <Heading> 6. Privacy</Heading> You acknowledge that you have read and understood our\n            Privacy Policy{' '}\n            <ClickableLink to='/privacy-notice'>\n              https://central.bayobab.africa/privacy-notice\n            </ClickableLink>{' '}\n            and agree that your use of the Portal is subject to our Privacy Policy in addition to\n            the privacy policies of any third-party providers whose websites, portals, applications,\n            materials, services or products are incorporated into the Portal. <br /> <br />{' '}\n            <Heading> 7. Cancellation/Suspension</Heading> We may cancel, suspend or restrict your\n            use of your Account and our Portal at any time without notice for no reason or with\n            reason including but not limited to instances where we suspect your Account is being\n            used or may be used: <br /> • by persons that have not been authorised by you; <br /> •\n            in breach of the Service Agreement, these Terms and/or any applicable law or government\n            order/policy/direction/guideline; or <br /> • in a manner that may cause loss to us.{' '}\n            <br /> <br />{' '}\n            <Heading> 8. Disclaimer of Warranties and Limitation of Liabilities</Heading> 8.1 We do\n            not guarantee, represent, or warrant that your use of the Portal will be uninterrupted,\n            error-free or secure, and you agree that from time to time we may suspend access to or\n            remove any of the Portal for indefinite periods of time, or cancel the Portal at any\n            time, without notice to you. <br /> <br /> 8.2 You expressly agree that your use of, or\n            inability to use, the Portal is at your sole risk. The Portal and all services delivered\n            to you through the Portal are (except as expressly stated by us or as agreed in the\n            service agreement) provided “as is” and “as available” for your use, without warranties\n            of any kind, either express or implied, including all implied warranties of\n            completeness, merchantability, fitness for a particular purpose, title and\n            non-infringement. <br /> <br /> 8.3 In no case shall we, our directors, officers,\n            employees, affiliates, agents, contractors, or licensors be liable for any direct,\n            indirect, incidental, punitive, special, or consequential damages arising from your use\n            of the Portal or for any other claim related in any way to your use of the Portal,\n            including, but not limited to, any errors or omissions in any content and information,\n            any loss or corruption of any data, loss of privacy of communications, business\n            interruption, loss of profit, loss of goodwill, loss of business, loss of opportunity,\n            loss or revenue, loss of anticipated savings, or any other economic loss or any loss of\n            goodwill or any loss or damage of any kind incurred as a result of the use of any\n            content, information, and/or service posted, transmitted, or otherwise made available\n            via the Portal, even if advised of their possibility. <br /> <br /> 8.4 We shall use\n            reasonable efforts to protect information submitted by you in connection with the\n            Portal, but you agree that your submission of such information is at your sole risk, and\n            we hereby disclaim all liability to you for any loss or liability relating to such\n            information in any way. <br /> <br /> 8.5 We do not represent or guarantee that the\n            Portal will be free from loss, corruption, attack, viruses, interference, hacking, or\n            other security intrusion, and we disclaim any liability relating thereto. You are\n            responsible for backing up your own system and maintaining and safeguarding your Account\n            information. <br /> <br /> <Heading> 9. Waiver And Indemnity </Heading> 9.1 By using the\n            Portal, you agree, to the extent permitted by law, to indemnify Bayobab and its\n            officers, directors, employees, servants, agents or contractors, licensors or other\n            persons for whom in law, Bayobab may be liable (in whose favour this constitutes a\n            stipulatio alteri) from any loss, damage, damages, liability, claim or demand due to or\n            arising out of your use of this Portal or your breach of these Terms.\n            <br />\n            9.2 You agree that you cannot sue or recover any damages from Bayobab, its directors,\n            officers, employees, affiliates, agents, contractors and licensors as a result of\n            Bayobab’s decision to remove or refuse to process any information or content, to warn\n            you, to suspend or terminate your access to the Portal, or to take any other action\n            during the investigation of a suspected violation or as a result of our conclusion that\n            a violation of these Terms has occurred. This waiver and indemnity provision applies to\n            all violations described in or contemplated by these Terms.\n            <br />\n            <br />\n            <Heading> 10. Intellectual Property</Heading>\n            10.1 The Portal is Copyright © 2024 Bayobab. All rights reserved.\n            <br />\n            10.2 The Intellectual Property is owned by Bayobab or used under license or with\n            permission. Trademarks displayed on the Portal are either trademarks owned by Bayobab or\n            belong to their respective owners. You may not copy, reproduce, display or use any\n            Intellectual Property in any manner whatsoever without Bayobab’s prior written\n            permission and nothing contained in the Portal should be construed as granting any\n            licence or right of use of any Intellectual Property.\n            <br /> 10.3 Where any of the Materials has been licensed to Bayobab or belongs to any\n            third party, your rights of use will also be subject to any terms and conditions which\n            that licensor or third party imposes from time to time, and you agree to comply with\n            such terms and conditions. <br /> <br /> <Heading> 11. Changes </Heading> Bayobab may,\n            in its sole discretion, change, amend, suspend, withdraw or discontinue any aspect,\n            feature, product, service or information contained on the Portal at any time without any\n            prior notice to you. Bayobab may also impose limits on certain features and services or\n            restrict your access to a section or the entire Portal without notice or liability.{' '}\n            <br /> <br /> <Heading> 12. Dispute Resolution</Heading> 12.1 In the event that any\n            claim, matter or dispute arises between you and Bayobab arising out of or in connection\n            with your use of the Portal or these Terms the claim, matter or dispute may be finally\n            resolved in accordance with the rules of the London Court of International Arbitration\n            (“LCIA”), (the “Rules”) which Rules are deemed to be incorporated by reference into this\n            clause. Accordingly, each term capitalized below shall have the meaning set out in the\n            Rules. The tribunal shall consist of three arbitrators. The Parties shall each be\n            entitled to nominate one arbitrator, the third arbitrator (acting as Chairman) being\n            nominated by agreement of the Parties. If the claimant in its Request for Arbitration or\n            the Respondent in its Response fails to nominate an arbitrator, the LCIA shall select\n            and appoint an arbitrator on the party’s behalf. If the Parties are unable to agree on\n            the nomination of the Chairman within thirty (30) days of the appointment by the LCIA of\n            the party-nominated arbitrators; such selection and appointment of the Chairman shall be\n            made by the LCIA. The seat of the arbitration shall be London, England. The language to\n            be used in the arbitral proceedings shall be English.\n            <br />\n            <br />\n            12.2 Notwithstanding the above provisions, either party shall be entitled to institute\n            action in any court of competent jurisdiction to obtain urgent interim relief or (in the\n            case of Bayobab) to collect any outstanding debts due and payable by you to Bayobab\n            <br /> <br />\n            <Heading> 13 Miscellaneous</Heading>\n            These Terms represent the entire agreement between us with respect to your use of the\n            Portal, superseding any prior agreements between us in relation to the same subject\n            matter contained in these Terms. You also may be subject to additional terms and\n            conditions that may apply when you use affiliate services, third-party content, or\n            third-party software. If any part of these Terms is held invalid or unenforceable, that\n            portion shall be construed in a manner consistent with applicable law to reflect, as\n            nearly as possible, the original intentions of the parties, and the remaining portions\n            shall remain in full force and effect. Our failure to enforce any right or provisions in\n            these Terms will not constitute a waiver of such or any other provision. We will not be\n            responsible for failures to fulfil any obligations due to causes beyond our control. We\n            will give you the necessary notices by posting them on the Portal. You agree to check\n            the Portal for notices and agree that you will be considered to have received a notice\n            when it is made available to you by posting on the Portal.\n          </AppContainer>\n        </Peering>\n      </MainContainer>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default Terms;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = {\n  mobile: '576px',\n  tablet: '768px',\n  tablet2: '1024px',\n  desktop: '1200px',\n};\n\nexport const AppContainer = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      border-radius: 24px;\n      background: #fff;\n      padding: 80px 90px;\n      color: #44536a;\n      ${typography['body-small-regular']}\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 40px 24px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 40px 24px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 40px 24px;\n      }\n    `;\n  }}\n`;\n\nexport const ClickableLink = styled.a`\n  color: #44536a; /* Custom link color */\n  text-decoration: none;\n  word-break: break-word;\n  &:hover {\n    text-decoration: underline; /* Add underline on hover */\n  }\n`;\n\nexport const TableWrapper = styled.div`\n  overflow-x: auto;\n  width: 100%;\n\n  &::-webkit-scrollbar {\n    height: 8px; /* Horizontal scrollbar height */\n  }\n\n  &::-webkit-scrollbar-thumb {\n    background-color: #ccc; /* Scrollbar thumb color */\n    border-radius: 4px; /* Rounded edges */\n  }\n\n  &::-webkit-scrollbar-thumb:hover {\n    background-color: #888; /* Darker color on hover */\n  }\n`;\n//table\n// export const Table = styled.table`\n//   border-collapse: collapse;\n//   width: 100%;\n//   min-width: 600px; /* Ensures the table remains readable */\n\n//   @media (max-width: 768px) {\n//     min-width: unset; /* Removes restriction on smaller screens */\n//   }\n// `;\n\n// export const TableRow = styled.tr``;\n\n// export const TableData = styled.td`\n//   padding: 8px;\n//   font-size: 14px; /* Default font size */\n//   word-wrap: break-word;\n\n//   &:first-child {\n//     border-right: 1px solid #ccc;\n//     font-weight: bold;\n//     text-align: left;\n\n//     @media (max-width: 768px) {\n//       text-align: left; /* Aligns labels to the left */\n//     }\n//   }\n\n//   &:last-child {\n//     padding-left: 16px;\n\n//     @media (max-width: 768px) {\n//       padding-left: 8px;\n//     }\n//   }\n\n//   border-bottom: 1px solid #ccc;\n\n//   @media (max-width: 768px) {\n//     padding: 6px; /* Reduces padding for smaller screens */\n//     font-size: 12px; /* Reduces font size for compactness */\n//   }\n// `;\n\nexport const Table = styled.table`\n  border-collapse: collapse;\n  width: 100%;\n\n  @media (max-width: 768px) {\n    display: block;\n    width: 100%;\n    overflow: hidden;\n  }\n`;\n\nexport const TableRow = styled.tr`\n  @media (max-width: 768px) {\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 16px;\n  }\n`;\n\nexport const SubHeading = styled.span`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      color: #44536a;\n      ${typography['body-small-semibold']}\n    `;\n  }}\n`;\n\nexport const TableData = styled.td`\n  padding: 8px;\n\n  &:first-child {\n    border-right: 1px solid #ccc;\n\n    min-width: 20rem;\n    @media (max-width: 768px) {\n      border-right: none;\n      border-top: 1px solid #ccc;\n      font-weight: bold;\n      padding-bottom: 4px;\n    }\n  }\n\n  &:last-child {\n    padding-left: 16px;\n\n    @media (max-width: 768px) {\n      padding-left: 0.1;\n      padding-top: 4px;\n    }\n  }\n\n  border-bottom: 1px solid #ccc;\n\n  @media (max-width: 768px) {\n    border-bottom: none;\n  }\n`;\n\nexport const Heading = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      color: #44536a;\n      ${typography['body-small-semibold']}\n    `;\n  }}\n`;\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 100px;\n    `;\n  }}\n`;\n\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 24px;\n      padding-bottom: 35px;\n    `;\n  }}\n`;\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      @media (min-width: ${breakpoints.desktop}) {\n        padding: 0 176px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n\nexport const StyledList = styled.ul`\n  list-style-position: disc;\n  padding-left: 1rem;\n\n  @media (max-width: ${breakpoints.tablet}) {\n    list-style-position: disc;\n    padding-left: 1rem;\n  }\n  @media (max-width: ${breakpoints.tablet2}) {\n    list-style-position: disc;\n    padding-left: 1rem;\n  }\n\n  @media (max-width: ${breakpoints.mobile}) {\n    list-style-position: disc;\n    padding-left: 1rem;\n  }\n`;\n\nexport const StyledListItem = styled.li`\n  padding-left: 0rem;\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport {\n  AppContainer,\n  BannerContainer,\n  ClickableLink,\n  Heading,\n  MainContainer,\n  Peering,\n  StyledList,\n  StyledListItem,\n  Table,\n  TableData,\n  TableRow,\n  TableWrapper,\n} from './Privacy.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\n\nconst Privacy: React.FC = (): ReactElement => {\n  const PeeringInformation = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Legal',\n    title: 'Privacy Notice',\n    bodyText: '',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_DYNAMIC_BANNER_URL + 'fa-main/asset-manifest.json',\n        { cache: 'no-cache' }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_DYNAMIC_BANNER_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <MainContainer>\n        <BannerContainer>\n          <FeatureAppLoader\n            featureAppId='fa-bayobab-privacy-banner'\n            src={src}\n            moduleType=''\n            config={{\n              bannerData: PeeringInformation,\n            }}\n            onError={(error: unknown): unknown => error}\n          >\n            {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Banner'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        </BannerContainer>\n        <Peering>\n          <AppContainer>\n            We respect your right to privacy, it is very important to us, and we take the protection\n            of your privacy and ensure the security of your Personal Data very seriously.\n            <br /> We are committed to the fair and transparent Processing of your Personal Data.\n            This Privacy Notice describes how we Process your Personal Data, explains your rights in\n            relation to the Personal Data we Process, and states our commitment when Processing your\n            Personal Data in a compliant, ethical and secure manner.\n            <br />\n            <br />\n            <Heading>Who we are?</Heading>\n            <br />\n            In this privacy notice “we”, “our” and “us” refers to MTN GlobalConnect Solutions\n            Limited trading as Bayobab Solutions (here after referred to as “Bayobab”)\n            <br />\n            <br />\n            Bayobab is a company duly incorporated under the laws of the Dubai International\n            Financial Centre, with registration number CL2700, having its registered address at\n            Units 30-35, Level 8, Central Park Office, DIFC, Dubai, United Arab Emirates. For more\n            information, please refer to our website below.\n            <br />\n            <br />\n            <ClickableLink href='https://Bayobab.africa/' target='_blank' rel='noopener noreferrer'>\n              https://Bayobab.africa/\n            </ClickableLink>\n            <br />\n            <br />\n            <Heading> Who does this notice apply to? </Heading>\n            <br />\n            This notice applies to individuals who are:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                any person(s) who contracts with us for the provision of products and services, or\n                who purchases a product from us (“customers”), including potential customers to the\n                extent Bayobab Processes your Personal Data;\n              </StyledListItem>\n              <StyledListItem>\n                any person(s) who uses our website, mobile applications or any products or services\n                (“users”);\n              </StyledListItem>\n              <StyledListItem>\n                all suppliers, contractors and service providers of Bayobab (“suppliers”) including\n                potential suppliers to the extent Bayobab Processes your Personal Data;\n              </StyledListItem>\n              <StyledListItem>\n                resellers such as Bayobab distributors and agents as well as partners (“resellers”)\n                including potential resellers to the extent Bayobab Processes your Personal Data;\n              </StyledListItem>\n              <StyledListItem>\n                any other persons (save for employees and job applicants) who share Personal Data\n                with Bayobab including beneficiaries, trustees or donors to Bayobab trusts or\n                charitable causes; Bayobab guests (“other Data Subjects”).\n              </StyledListItem>\n            </StyledList>\n            <br />\n            <Heading>Important terms you need to understand when reading this notice?</Heading>\n            <br />\n            <TableWrapper>\n              <Table>\n                <TableRow>\n                  <TableData>Data Subject</TableData>\n                  <TableData>\n                    Means an identified or identifiable natural person. An identifiable natural\n                    person is one who can be identified, directly or indirectly, in particular by\n                    reference to an identifier or one or more factors specific to the physical,\n                    physiological, biometric, genetic, mental, economic, cultural or social identity\n                    of that natural person. It shall also include any additional persons afforded\n                    data privacy rights and protection of Personal Data in terms of Applicable Data\n                    Privacy Law(s).\n                  </TableData>\n                </TableRow>\n                <TableRow>\n                  <TableData>Local Regulatory Requirements</TableData>\n                  <TableData>\n                    Legal, statutory, regulatory, license conditions rules, guidelines, Ministerial/\n                    National Security orders or directives, and Directives relating to Public safety\n                    (where applicable) and Data Sovereignty*-related requirements with which Bayobab\n                    is required to comply by applicable authorities in the jurisdictions in which\n                    Bayobab operates.\n                    <br />\n                    <br />\n                    <strong>\n                      *Data Sovereignty relates to the laws and governance structures that Personal\n                      Data is subject to, due to the geographical location of where it is Processed.\n                    </strong>\n                  </TableData>\n                </TableRow>\n                <TableRow>\n                  <TableData>Personal Data </TableData>\n                  <TableData>\n                    Means any information relating to a Data Subject. Examples of “Personal Data”\n                    includes, but is not limited to, the following: <br />\n                    <StyledList>\n                      <StyledListItem>a name;</StyledListItem>\n                      <StyledListItem>any identifying number, symbol;</StyledListItem>\n                      <StyledListItem>\n                        contact information (e.g. e-mail address, postal address, telephone number);\n                      </StyledListItem>\n                      <StyledListItem>location data or physical address;</StyledListItem>\n                      <StyledListItem>\n                        online identifier or other assignment to the person;\n                      </StyledListItem>\n                      <StyledListItem>\n                        the biometric information of the Data Subject;\n                      </StyledListItem>\n                      <StyledListItem>\n                        factors specific to the Data Subject’s biological, physical, biometric,\n                        physiological, mental, genetic, economic, cultural or social identity;\n                      </StyledListItem>\n                      <StyledListItem>\n                        the personal opinions, views or preferences of the Data Subject;\n                      </StyledListItem>\n                      <StyledListItem>\n                        correspondence sent by the Data Subject that is implicitly or explicitly of\n                        a private or confidential nature or further correspondence that would reveal\n                        the contents of the original correspondence;\n                      </StyledListItem>\n                      <StyledListItem>\n                        the views or opinions of another person about the Data Subject;\n                      </StyledListItem>\n                      <StyledListItem>\n                        the name of the Data Subject if it appears with other Personal Data relating\n                        to the Data Subject or if the disclosure of the name itself would reveal\n                        information about the Data Subject;\n                      </StyledListItem>\n                      <StyledListItem>Sensitive Personal Data.</StyledListItem>\n                    </StyledList>\n                  </TableData>\n                </TableRow>\n                <TableRow>\n                  <TableData>Processing</TableData>\n                  <TableData>\n                    Any operation or set of operations which is performed on Personal Data or on\n                    sets of Personal Data, whether or not by automated means, including collection,\n                    receipt, recording, organisation, structuring, collation, storage; adaptation or\n                    alteration, updating, retrieval, consultation, use, dissemination, disclosure by\n                    means of transmission; or otherwise making available, alignment or combination,\n                    merging, restriction, erasure, destruction, and/or degradation.\n                  </TableData>\n                </TableRow>\n                <TableRow>\n                  <TableData>Sensitive Personal Data</TableData>\n                  <TableData>\n                    A sub-set of Personal Data which is considered more sensitive than other\n                    categories of Personal Data. Sensitive Personal Data includes but is not limited\n                    to Personal Data revealing a Data Subject&rsquo;s racial or ethnic origin;\n                    political opinions or persuasions; religious or philosophical beliefs; trade\n                    union membership; criminal record of behaviour relating to the alleged\n                    commission of a crime or proceedings relating to the alleged commission of a\n                    crime; genetic data; biometric data; data concerning health; and/or data\n                    concerning a Data Subject&rsquo;s sex life or sexual orientation.\n                  </TableData>\n                </TableRow>\n              </Table>\n            </TableWrapper>\n            <br />\n            <Heading> What Personal Data does Bayobab collect and use?</Heading>\n            <br />\n            To run our business, we may be required to collect, use, store and otherwise Process\n            your Personal Data. The Personal Data that we may collect and Process can vary depending\n            on the Bayobab products and services that you use, contract for or that you supply to\n            us; how you may be using or delivering those products and services; and the means by\n            which you may be interacting with us.\n            <br />\n            <br />\n            We will only collect the Personal Data of yours that is adequate, relevant and limited\n            to what is needed in relation to the specific purposes for which we are collecting it,\n            as described in this privacy notice.\n            <br />\n            <br />\n            The Personal Data collected and processed by us may include:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                account and contact information: which may include your name, contact information\n                (email address, postal address, residential address, telephone number), date of\n                birth, identifying numbers (identity document number, passport numbers and/or other\n                national ID numbers as required); billing information; financial information; any\n                other information required to comply with regulatory requirements;\n              </StyledListItem>\n              <StyledListItem>\n                network performance: we collect information which informs our network performance\n                such as your use of our products, services or equipment;\n              </StyledListItem>\n              <StyledListItem>\n                financial information: such as your bank account or credit card details; financial\n                history (including information to determine your creditworthiness);\n              </StyledListItem>\n              <StyledListItem>\n                usage of your devices, our services and products: data usage (including browsing\n                history); text message records; purchase activities; and other similar information;\n              </StyledListItem>\n              <StyledListItem>\n                web browsing and application usage: we collect your Personal Data when you visit our\n                website or use our mobile applications. This may include, your IP address, browser\n                type; operating system; mobile carrier; your ISP; URLs of sites from which you\n                arrive or leave the website and mobile applications and sites that have our platform\n                technology embedded; time you spend on our website or mobile applications; links or\n                advertisements you see; purchases made through our website; first party cookies and\n                other web tracking technologies. We may also collect information identifying or\n                related to equipment accessing our networks including the software, configuration,\n                equipment type and other unique identifiers (such as your username and password).\n                Third-party cookies will also be collected from our selected marketing technology\n                partner(s), third party websites and applications.\n              </StyledListItem>\n              <StyledListItem>\n                supplier, reseller, contract and service provider information: which may include\n                name, contact information, billing information, background checks, financial\n                history, employment history, tax information, information related to your\n                performance; any other information which may be required in terms of regulatory\n                requirements applicable to Bayobab and/or our policies;\n              </StyledListItem>\n              <StyledListItem>\n                multimedia data: such as unaltered photographs, audio recordings, or video\n                recordings;\n              </StyledListItem>\n              <StyledListItem>\n                social media information: we collect your information related to your interaction\n                with our social media accounts, content and marketing campaigns (including your\n                details when you enter into a competition or interact with an advertisement); your\n                comments, your reactions (i.e. &rsquo;likes&rsquo;), Personal Data available from\n                your public profile and information you have allowed social media platforms to share\n                with us in terms of your privacy preferences on that platform; and your social media\n                handles;\n              </StyledListItem>\n              <StyledListItem>\n                biometric information: such as images of you, fingerprints, voice recording or\n                voiceprint, scan of your face to identify you;\n              </StyledListItem>\n              <StyledListItem>\n                demographic information: we may collect information related to your gender, race or\n                ethnic origin, age, education, financial status;\n              </StyledListItem>\n              <StyledListItem>\n                views, opinions and interests: we collect information regarding your views, opinions\n                and preferences (for example when you participate in a survey or when you provide\n                feedback regarding our products or services or online-based behaviour) as well as\n                your interests. In the case of suppliers and resellers, we will obtain the views and\n                opinions of others regarding your performance (e.g. references).\n              </StyledListItem>\n            </StyledList>\n            <Heading>Where does Bayobab collect my Personal Data from? </Heading>\n            <br /> In most circumstances we collect Personal Data directly from you, for instance,\n            when you buy or use any of our products or services, visit our website, interact with\n            our customer services departments.\n            <br />\n            <br />\n            In some instances, however, we will also collect your Personal Data indirectly from\n            third parties, such as from:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>Credit check or vetting agencies;</StyledListItem>\n              <StyledListItem>Social media platforms;</StyledListItem>\n              <StyledListItem>Marketing agencies;</StyledListItem>\n              <StyledListItem>\n                Other entities within the Bayobab (e.g. based on the usage of their applications,\n                websites and sharing of Personal Data);\n              </StyledListItem>\n              <StyledListItem>\n                Resellers in respect of the Personal Data of customers, users and suppliers;\n              </StyledListItem>\n              <StyledListItem>\n                Third parties providing supplier and reseller references.\n              </StyledListItem>\n            </StyledList>\n            <Heading> For what purposes does Bayobab use your Personal Data? </Heading>\n            <br />\n            Bayobab will use your Personal Data for purposes of: <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                <strong>Verification:</strong> we Process Personal Data necessary to verify your\n                identity when you are purchasing our products and services, when you make contact\n                with us, or when we contact you;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Credit checks:</strong> we perform credit checks, including using the\n                services of a credit bureau, where you are applying for a contract for products\n                and/or services with us, and to assess your application;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Contracting and processing orders:</strong> we Process your Personal Data in\n                order to conclude and contract, to process your request to provide products and\n                services and to keep you updated with your order progress and to provide our\n                products and services to you;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Billing and collection:</strong> your Personal Data is Processed to perform\n                billing of your account for your use of our products and services. We also Process\n                your Personal Data to collect outstanding monies due to us through our collection\n                processes;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Monitor and improve services:</strong> we perform research and statistical\n                analysis on our customers’ and/or users’ behaviour for purposes of monitoring the\n                performance of our network, products and services and maintaining or improving our\n                products and services to you;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Improve value proposition:</strong> we analyse our customers and/or users\n                preferences and interests based on their use of Bayobab websites, mobile\n                applications, products, services and/or social media interactions to improve on our\n                services, products, to perform marketing, online behavioural advertising and to\n                develop new services or products which may be suitable to you;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Network performance:</strong> we Process your Personal Data to protect our\n                network and manage the volume of calls, texts and other use of our network. For\n                example, we identify peak periods of use, so we can ensure the network can handle\n                the volume during those times.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Fraud and crime prevention:</strong> we Process your Personal Data to detect\n                and prevent fraud or criminal activity through the use of our products or services;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Security:</strong> we Process your Personal Data to prevent Personal Data\n                Breaches, and to safeguard our IT systems, networks, assets, buildings and places of\n                work;\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Compliance and Reporting:</strong> we Process your Personal Data where this\n                is required to comply with any legal obligations imposed on Bayobab by applicable\n                law or in response to directives from law enforcement or court orders (for example\n                “know your client” requirements) and to discharge any prescribe reporting\n                obligations.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Customer service:</strong> we Process your Personal Data to provide you with\n                customer services including to respond to any question, query, requests, concerns or\n                complaints you may have about Bayobab, including our network, products, services,\n                employees or our Processing activities.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            Bayobab will not further Process Personal Data for any purpose that is incompatible with\n            the original purpose that the Personal Data was collected for unless: <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                such further Processing is authorised in terms of applicable Data Protection laws;\n              </StyledListItem>\n              <StyledListItem>\n                we have obtained your consent to the further Processing;\n              </StyledListItem>\n              <StyledListItem>\n                the further Processing is necessary to comply with an obligation imposed by Local\n                Regulatory Requirements or for conducting proceedings in a court or tribunal; or\n              </StyledListItem>\n              <StyledListItem>\n                it is for scientific or historical research purposes or statistical purposes.\n              </StyledListItem>\n            </StyledList>\n            <Heading> Is Bayobab allowed to Process my Personal Data?</Heading>\n            <br /> We are allowed to Process your Personal Data, so long as we have a legal basis to\n            do so (i.e. there is a justification to Process your Personal Data in terms of laws\n            applicable to Bayobab and/or our policies permit such Processing). When we Process your\n            Personal Data, we will rely on one of the following legal bases, as appropriate, having\n            regard to the purpose of Processing:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                <strong>Performance of a contract:</strong> this is when the Processing of your\n                Personal Data is necessary to conclude a contract or perform our obligations under a\n                contract entered into with you\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Legal obligation:</strong> this is when we are required to Process your\n                Personal Data to comply with a legal obligation\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Legitimate interests of Bayobab or a third party:</strong> we will Process\n                information about you where it is in our or a third party’s legitimate interest\n                provided these interests are not overridden by your interests and fundamental rights\n                and freedom to data privacy\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Vital interests of the data subject or another natural person:</strong> the\n                Processing is necessary to protect the vital interests of the relevant Data Subject\n                or of another natural person\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Public Interest:</strong> the Processing is necessary for the performance of\n                a task carried out in the public interest.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Your consent:</strong> in some cases, we will ask you for specific\n                permission to Process some of your Personal Data. This consent may be withdrawn at\n                any time.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            In those instances when we Process your Sensitive Personal Data, we will rely on one of\n            the following legal bases as appropriate having regard to the purpose of Processing:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                You have given explicit consent to the Processing of your Sensitive Personal Data\n                for one or more specified purposes. You may withdraw such consent at any time;\n              </StyledListItem>\n              <StyledListItem>\n                Processing is necessary to protect your vital interests or of another natural person\n                and you are physically or legally incapable of giving consent;\n              </StyledListItem>\n              <StyledListItem>\n                Processing relates to Sensitive Personal Data which was intentionally made public by\n                you;\n              </StyledListItem>\n              <StyledListItem>\n                Processing is necessary for the establishment, exercise or defence of legal claims\n                or whenever courts are acting in their judicial capacity;\n              </StyledListItem>\n              <StyledListItem>\n                Processing is necessary for scientific or historical research purposes or\n                statistical purposes provided such Processing is proportionate to the aim pursued,\n                Bayobab respects the essence of the right to data protection and Bayobab provides\n                for suitable and specific measures to safeguard your fundamental rights and\n                interests.\n              </StyledListItem>\n              <StyledListItem>\n                Processing of Personal Data related to criminal behaviour is obtained and used in\n                accordance with Local Legal and Regulatory Requirements.\n              </StyledListItem>\n            </StyledList>\n            <Heading> Is it mandatory to provide Bayobab the Personal Data asked for?</Heading>\n            <br />\n            It is not mandatory for you to provide any Personal Data to us. However, failing to\n            provide certain Personal Data to us, particularly where that Personal Data has been\n            requested by us may impact our ability to, amongst other things:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>provide our products or services to you;</StyledListItem>\n              <StyledListItem>\n                to support you with and manage our products and services;\n              </StyledListItem>\n              <StyledListItem>provide you full functionality to all our webpages;</StyledListItem>\n              <StyledListItem>\n                on-board you as supplier, reseller, contractor or service provider;\n              </StyledListItem>\n              <StyledListItem>to allow you access to our premises or buildings.</StyledListItem>\n            </StyledList>\n            <Heading>Does Bayobab Process my Personal Data automatically?</Heading>\n            <br /> Bayobab does not perform any automated decision-making (including profiling)\n            which results in legal consequences for you and/or which affects you in a similarly\n            significant manner. Should this change in the future, we will notify you and update this\n            privacy notice accordingly.\n            <br />\n            <br />\n            <Heading>How long does Bayobab keep my Personal Data for? </Heading>\n            <br />\n            We will not retain your Personal Data for any longer than is necessary for achieving the\n            purpose(s) for which the Personal Data is Processed, unless:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                retention of the Personal Data is required or authorised by Local laws;\n              </StyledListItem>\n              <StyledListItem>\n                you have consented to the retention of the Personal Data; or\n              </StyledListItem>\n              <StyledListItem>\n                the Personal Data is required for historical, statistical or research purposes\n                provided that we have established appropriate safeguards against the Personal Data\n                being used for any other purposes.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            We will ensure that Personal Data which is no longer required, or which we are no longer\n            authorised to retain, is as soon as reasonably practicable, de-identified or destroyed\n            through secure means, alternatively through permanent erasure by appropriate and\n            effective mechanisms.\n            <br />\n            <br />\n            <Heading>Does Bayobab transfer my Personal Data to third parties?</Heading>\n            <br />\n            Yes, we do share Personal Data with affiliated third parties, as necessary for our\n            legitimate business needs, to carry out your requests, and/or as required or permitted\n            by law. This would include:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                <strong>Our service providers:</strong> We transfer your Personal Data to our\n                third-party service providers, such as our (IT) systems providers, our hosting\n                providers, consultants (such as legal advisers) and other goods and services\n                providers. These providers Process your Personal Data on behalf of Bayobab in terms\n                of a binding agreement with appropriate security safeguards. Bayobab will only\n                transfer Personal Data to such a service provider when they meet our strict\n                standards on the Processing of data and security. We only share Personal Data that\n                allows our service providers to provide their services and they are not allowed to\n                Process your Personal Data for any other purpose.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>If we are reorganized or sold to another organization:</strong> Bayobab may\n                disclose Personal Data in connection with the sale, assignment, or other transfer of\n                the business to which the data relates.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Courts, tribunals, law enforcement, or regulatory bodies:</strong> Bayobab\n                may disclose Personal Data in order to respond to requests of courts, tribunals,\n                government, or law enforcement agencies or where it is necessary or prudent to\n                comply with applicable laws, court or tribunal orders or rules, or government\n                regulations.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Audits:</strong> disclosures of Personal Data may also be needed by our\n                auditors including to perform financial audits, data privacy or security audits\n                and/or to investigate or respond to a complaint or security threat.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Insurers:</strong> our business requirements mean that we carry significant\n                insurance cover in respect of business activities. There are several different\n                participants in the insurance market (e.g., brokers, insurers, and reinsurers, as\n                well as their professional advisors and other third parties involved should there be\n                a claim). Some of these insurance market participants will require that we disclose\n                Personal Data about you to them. The information will be used by the insurance\n                market participants in the underwriting and ongoing administration of the insurance\n                products, where there is a claim that you are relevant to and to allow the insurance\n                market participants to comply with their legal and regulatory obligations. Some of\n                these insurance market participants will handle this information on our behalf (like\n                our service providers described above), but others will want to Process information\n                about you independent of us.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Other third parties:</strong> we may share information with resellers or\n                other third parties who use Bayobab platforms/systems to advertise their product.\n                However, the Personal Data collected is anonymised and/or aggregated prior to\n                sharing with such third parties.\n              </StyledListItem>\n            </StyledList>\n            <Heading>Does Bayobab transfer my Personal Data internationally?</Heading>\n            <br /> Bayobab may transfer your Personal Data to other entities within the Bayobab\n            group of companies. All Bayobab entities are bound by binding corporate rules which\n            ensures that the Bayobab entity receiving your Personal Data protects your Personal Data\n            in accordance with those binding corporate rules.\n            <br /> Bayobab also transfers certain Personal Data outside of the United Arab Emirates\n            to third parties working with us or on our behalf for the purposes described in this\n            Privacy Notice. When transferring Personal Data internationally to third parties we\n            ensure your Personal Data will continue to be protected for example, by entering into\n            binding data transfer agreements or by ensuring there are adequate data privacy laws and\n            regulatory requirements, which require the relevant third party to adhere to the data\n            handling and data protection requirements, acceptable to Bayobab.\n            <br />\n            <br />\n            <Heading>How does Bayobab secure my Personal Data?</Heading>\n            <br /> Bayobab secures the integrity and confidentiality of the Personal Data in its\n            possession or under its control by implementing appropriate, reasonable technical,\n            physical, and organisational measures to prevent:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                accidental loss of, damage to, or unauthorised destruction of your Personal Data;\n              </StyledListItem>\n              <StyledListItem>\n                unlawful or unauthorised access to your Personal Data; and\n              </StyledListItem>\n              <StyledListItem>\n                unlawful or unauthorised Processing of your Personal Data.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            As part of its processes, Bayobab takes reasonable measures to regularly identify and\n            assess all reasonably foreseeable internal and external risks to Personal Data in its\n            possession or under its control and implements reasonable and appropriate technical,\n            physical and organisational security measures to protect against the identified risks.\n            <br />\n            <br />\n            <Heading>How does Bayobab handle Personal Data Breaches? </Heading>\n            <br />\n            While Bayobab implements reasonable measures to prevent or reduce the likelihood and\n            impact of Personal Data Breaches, this risk can&rsquo;t be completely eliminated. If\n            Bayobab becomes aware of or reasonably suspects a Personal Data Breach has occurred or\n            that the integrity or confidentiality of Personal Data has been compromised, Bayobab\n            adheres to its incident management Policies, Procedures and supporting documents\n            governing the handling and reporting of Personal Data Breaches. <br />\n            <br />\n            <Heading>What are my rights?</Heading>\n            <br /> If Bayobab Processes Personal Data about you, you have the following rights:\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                <strong>Access and correction:</strong> you have the right to access the Personal\n                Data retained by Bayobab. This is sometimes called a &rsquo;Data Subject Access\n                Request&rsquo;. If we agree that we are obliged to provide Personal Data to you, we\n                will provide it to you free of charge. Before providing Personal Data to you, we may\n                ask for proof of identity and sufficient information about your interactions with us\n                that we can locate your Personal Data. If the Personal Data we hold about you is\n                incorrect, you are entitled to ask us to correct any inaccuracies in the Personal\n                Data.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Object to Processing:</strong> you have the right to object to us Processing\n                your Personal Data, on grounds relating to your particular situation, under certain\n                circumstances (including to receiving direct marketing from us). For example, if we\n                are Processing your Personal Data on the basis that is necessary for purposes of our\n                or a third party&rsquo;s legitimate interest or in the public interest. You may also\n                object if you believe there is no legal basis for us to Process your Personal Data\n                anymore.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Withhold consent:</strong> you have the right to withhold your consent\n                without any fear of negative repercussions in circumstances which we seek your\n                consent to Process your Personal Data. If you experience any intimidation or\n                negative repercussions for withholding your consent you should report this to our\n                whistleblower hotline below.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            <Table>\n              <TableRow>\n                <TableData>Email Adress</TableData>\n                <TableData>\n                  <ClickableLink href='mailto:anonymous@tip-offs.net'>\n                    anonymous@tip-offs.net\n                  </ClickableLink>\n                </TableData>\n              </TableRow>\n              <TableRow>\n                <TableData>Website:</TableData>\n                <TableData>\n                  <ClickableLink\n                    href='https://www.tip-offs.com'\n                    target='_blank'\n                    rel='noopener noreferrer'\n                  >\n                    https://www.tip-offs.com\n                  </ClickableLink>\n                </TableData>\n              </TableRow>\n              <TableRow>\n                <TableData>Free Post in South Africa:</TableData>\n                <TableData>\n                  Tip-off Anonymous Free Post\n                  <br /> KZN 138\n                  <br />\n                  Umhlanga Rocks 4320\n                  <br /> KwaZulu Natal South Africa\n                </TableData>\n              </TableRow>\n              <TableRow>\n                <TableData>Call number:</TableData>\n                <TableData>\n                  +27 83 123 7867 <br />\n                  <ClickableLink\n                    href='https://www.tip-offs.com/Contact.aspx'\n                    target='_blank'\n                    rel='noopener noreferrer'\n                  >\n                    https://www.tip-offs.com/Contact.aspx\n                  </ClickableLink>\n                  <br />\n                </TableData>\n              </TableRow>\n            </Table>\n            <br />\n            <br />\n            <StyledList>\n              <StyledListItem>\n                <strong>Withdraw consent:</strong> you also have the right to withdraw your consent\n                at any time and we cease Processing your Personal Data unless there is an\n                alternative legal basis to continue Processing your Personal Data. We will advise\n                you if we intend to continue Processing your Personal Data in these circumstances.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Disposal / Restrictions:</strong> in addition, you may have rights to have\n                your information deleted/ destroyed if we are keeping it too long or have no legal\n                basis to Process it. You may also request that the Processing of your Personal Data\n                is restricted in certain circumstances.\n              </StyledListItem>\n              <StyledListItem>\n                <strong>Lodge complaints:</strong> you have the right to lodge a complaint regarding\n                the way your Personal Data is being Processed with Bayobab or if you believe there\n                has been a breach of Bayobab privacy policies and/or data privacy laws.\n              </StyledListItem>\n            </StyledList>\n            <br />\n            You can make a request or exercise these rights by contacting Bayobab at{' '}\n            <ClickableLink href='mailto:BayobabRiskandCompliance@Bayobab.Africa.'>\n              <i>BayobabRiskandCompliance@Bayobab.Africa.</i>\n            </ClickableLink>{' '}\n            and we will make all reasonable and practical efforts to comply with your request, so\n            long as it is consistent with applicable laws and internal policies.\n            <br />\n            <br />\n            <Heading>Contact us</Heading>\n            <br /> If you have any questions or concerns regarding this Privacy Notice and would\n            like further information about how we protect your information and/or when you want to\n            contact your local Data Protection Officer (DPO), please email us at{' '}\n            <ClickableLink href='mailto:BayobabRiskandCompliance@Bayobab.Africa.'>\n              <i>BayobabRiskandCompliance@Bayobab.Africa.</i>\n            </ClickableLink>{' '}\n            <br />\n            <br />\n            If you feel that your questions or concerns have not been adequately dealt within or\n            otherwise feel uncomfortable raising them with the local DPO you may contact{' '}\n            <ClickableLink href='mailto:GroupDataPrivacy@mtn.com.'>\n              <i> GroupDataPrivacy@mtn.com.</i>\n            </ClickableLink>{' '}\n            <br />\n            <br />\n            You may also lodge any perceived non-compliance with privacy policies and/or breach of\n            privacy laws with{' '}\n            <ClickableLink href='mailto:anonymous@tip-offs.net'>\n              anonymous@tip-offs.net\n            </ClickableLink>{' '}\n            or{' '}\n            <ClickableLink\n              href='https://www.tip-offs.com'\n              target='_blank'\n              rel='noopener noreferrer'\n            >\n              https://www.tip-offs.com\n            </ClickableLink>{' '}\n            or call\n            <strong> +27 83 123 7867</strong>\n            <br />\n            <br />\n            <Heading>Changes to privacy policy</Heading>\n            <br /> Bayobab may modify this Privacy Notice from time to time to reflect our current\n            privacy practices. When we make changes to this notice, we will revise the “effective”\n            date at the top of this notice Please review the terms of this Privacy Notice regularly\n            for any such amendments.\n          </AppContainer>\n        </Peering>\n      </MainContainer>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default Privacy;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nconst breakpoints = { mobile: '576px', tablet: '768px', tablet2: '1024px', desktop: '1200px' };\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding-top: 5rem;\n    `;\n  }}\n`;\n\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      padding: 0 24px;\n      padding-bottom: 35px;\n    `;\n  }}\n`;\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      @media (min-width: ${breakpoints.desktop}) {\n        padding: 0 176px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { BannerContainer, MainContainer } from './ApiDocumentation.styles';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { createGlobalStyle } from 'styled-components';\n\nconst GlobalStyles = createGlobalStyle`\n  .sc-klYcpz.limFAJ {\n    display: none !important;\n  }\n`;\n\nconst ApiDocumentation: React.FC = (): ReactElement => {\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_FA_WABSP_API_DOCUMANTATION + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_WABSP_API_DOCUMANTATION}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n  return (\n    <>\n      {src && (\n        <ThemeProvider mode='light' platform='bayobab'>\n          <MainContainer>\n            <BannerContainer>\n              <GlobalStyles />\n              <FeatureAppLoader\n                featureAppId='fa-bayobab-documantation'\n                src={src}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                    >\n                      <ErrorUi productName={'Api Documantation'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </BannerContainer>\n          </MainContainer>\n        </ThemeProvider>\n      )}\n    </>\n  );\n};\n\nexport default ApiDocumentation;\n","import React, { ReactElement } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { BannerContainer, MainContainer, Peering } from './PeeringPolicy.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nconst PeeringList: React.FC = (): ReactElement => {\n  const envs = {\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    peeringList: process.env.REACT_APP_IP_PORTAL_PEERING_POLICY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n  const PeeringInformation = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Network Tools',\n    title: 'Peering Information',\n    bodyText: 'Our peering policy governs how we connect with other networks.',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  return !urls.banner || !urls.peeringList ? (\n    <ThemeProvider mode='light' platform='core'>\n      <Loading isLoading={true} />\n    </ThemeProvider>\n  ) : (\n    <ThemeProvider mode='light' platform='core'>\n      <MainContainer>\n        <BannerContainer>\n          <FeatureAppLoader\n            featureAppId='fa-bayobab-peering-list-banner'\n            src={urls.banner}\n            moduleType=''\n            config={{\n              bannerData: PeeringInformation,\n            }}\n            onError={(error: unknown): unknown => error}\n          >\n            {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Peering List Banner'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        </BannerContainer>\n        <Peering>\n          <FeatureAppLoader\n            src={urls.peeringList}\n            moduleType=''\n            config={{\n              bannerData: PeeringInformation,\n            }}\n            onError={(error: unknown): unknown => error}\n            featureAppId={'peering-list'}\n          >\n            {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Peering List'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n        </Peering>\n      </MainContainer>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default PeeringList;\n","import React, { ReactElement } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { BannerContainer, MainContainer, Peering } from './PeeringPolicy.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nconst PeeringRequest: React.FC = (): ReactElement => {\n  const envs = {\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    peeringList: process.env.REACT_APP_IP_PORTAL_PEERING_POLICY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const PeeringInformation = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Network Tools',\n    title: 'Peering Information',\n    bodyText: 'Our peering policy governs how we connect with other networks.',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='core'>\n      {!urls.banner || !urls.peeringList ? (\n        <Loading isLoading={true} />\n      ) : (\n        <MainContainer>\n          <BannerContainer>\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-peering-request-banner'\n              src={urls.banner}\n              moduleType=''\n              config={{\n                bannerData: PeeringInformation,\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Peering Request Banner'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </BannerContainer>\n          <Peering>\n            <FeatureAppLoader\n              src={urls.peeringList}\n              moduleType=''\n              config={{\n                bannerData: PeeringInformation,\n              }}\n              onError={(error: unknown): unknown => error}\n              featureAppId={'peering-request'}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Peering Request'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          </Peering>\n        </MainContainer>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport default PeeringRequest;\n","import styled from 'styled-components';\n\nexport const OverviewCardsContainer = styled.div`\n  display: flex;\n  width: 100%;\n  gap: 2rem;\n\n  @media (max-width: 769px) {\n    display: grid;\n  }\n`;\n\nexport const CardWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: ${({ theme }): DefaultTheme => theme.floats['margin-large']};\n  align-self: stretch;\n`;\n\nexport const MetricCardWrapper = styled.div`\n  display: flex;\n  width: 100%;\n  margin-top: 2rem;\n`;\n","export const serviceNameMap: Record<string, string> = {\n  'L2 VPN': 'l2vpn',\n  'L3 VPN': 'l3vpn',\n  'Dedicated Internet Access': 'dia',\n  'International Private Leased Circuit': 'iplc',\n  'Dark Fiber': 'dark-fibre',\n  'National Private Leased Circuit': 'nplc',\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport {\n  Logout,\n  Docs,\n  UserSymbol,\n  PlusWithCircle,\n  Bundles,\n  Edit,\n  NetworkServices,\n  // Analytics,\n  UserGroup,\n} from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { FeatureAppContainer } from '../../QuickQuotes/OverviewPage/QuickQuotesDashboard.styled';\nimport { CardWrapper, MetricCardWrapper, OverviewCardsContainer } from './ConvergeDashboard.styles';\nimport OverviewCards from '../../whatsappBsp/Dashboard/OverviewCards/OverviewCards';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile, ServiceForm } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { Text } from '@mtnkente/paragon-display';\nimport { getServiceRequests } from '../../../../apis/get-service-requests';\nimport { getLatestDraftForm } from '../../../../utils/get-latest-draft';\nimport { serviceNameMap } from '../../../../utils/service-map';\nimport { navigationService } from '../../../../..';\n\ntype ConvergeDashboardProps = {\n  serviceNum: number;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  requestsNum: number;\n  draftsNum: number;\n  serviceRequests?: ServiceForm[];\n  logoutF?: () => Promise<void>;\n};\n\nconst ConvergeDashboard = ({\n  serviceNum,\n  profile,\n  isSupueruser,\n  requestsNum,\n  draftsNum,\n  serviceRequests,\n  logoutF,\n}: ConvergeDashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [userServiceRequests, setUserServiceRequests] = useState<ServiceForm[]>(\n    serviceRequests ?? []\n  );\n  const [serviceRequestsCount, setServiceRequestsCount] = useState<number>(requestsNum ?? 0);\n  const [draftsCount, setDraftsCount] = useState<number>(draftsNum ?? 0);\n  const [latestDraft, setLatestDraft] = useState<ServiceForm | undefined>(undefined);\n  const [latestDraftName, setLatestDraftName] = useState<string>('');\n  const [formData, setFormData] = useState<any>({});\n  const [formType, setFormType] = useState<string>('');\n  const [formId, setFormId] = useState<string>('');\n\n  useEffect(() => {\n    if (!profile?.emailAddress) return;\n    let polling = true;\n    const fetchServiceRequests = async (): Promise<void> => {\n      const token = localStorage.getItem('accessToken');\n      try {\n        const requests = await getServiceRequests(profile.emailAddress, correlationId, token!);\n        setUserServiceRequests((requests.data ?? []).slice().reverse());\n        setServiceRequestsCount(requests.data.length);\n        setDraftsCount(requests.data.filter((request) => request.status === 'Draft').length);\n      } catch (error) {\n        console.error('Error fetching service requests:', error);\n      }\n    };\n    fetchServiceRequests().catch(console.error);\n    const intervalId = setInterval(() => {\n      if (polling) fetchServiceRequests().catch(console.error);\n    }, 5000);\n    return (): any => {\n      polling = false;\n      clearInterval(intervalId);\n    };\n  }, [profile?.emailAddress]);\n\n  useEffect(() => {\n    const draft = getLatestDraftForm(userServiceRequests);\n    setLatestDraft(draft);\n    setLatestDraftName(latestDraft?.formName ?? '');\n    if (latestDraft) {\n      const form = encodeURIComponent(JSON.stringify(latestDraft.technicalSpecs));\n      setFormData(form);\n      setFormType(latestDraft?.formType ?? '');\n      setFormId(latestDraft._id ?? '');\n    }\n  }, [userServiceRequests]);\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    helpMenu: process.env.REACT_APP_FA_HELP_MENU ?? '',\n    metricCards: process.env.REACT_APP_FA_PRODUCT_CARDS_URL ?? '',\n  };\n\n  // const formData = encodeURIComponent(JSON.stringify(row.technicalSpecs));\n  //                 navigationService?.navigateTo(\n  //                   `/converge/services/request-new-service/${serviceNameMap[row.formType] ?? ''}`,\n  //                   { formData: formData, formId: row._id }\n  //                 );\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const BannerData = {\n    state: 'Start journey',\n    backgroundColor: 'white',\n    title: 'Welcome to Converge!',\n    text: (\n      <div>\n        Bayobab Central&apos;s self-service NaaS portal, enabling businesses to explore, acquire,\n        and manage Fibre Solutions seamlessly.\n      </div>\n    ),\n    image: process.env.REACT_APP_ASSETS_URL + 'Converge/overview-banner-min.webp',\n    // buttonLabel: 'View active services',\n    // navigateTo: 'converge/services',\n    buttonLabel: 'Request new service',\n    buttonIcon: <PlusWithCircle />,\n    navigateTo: 'converge/services/request-new-service',\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Converge (Network-as-a-Service)',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        // {\n        //   id: '2',\n        //   label: 'Notification Preferences',\n        //   icon: <Notification />,\n        //   redirectUrl: '/notification',\n        //   activeTab: '',\n        // },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const metricCardData = useMemo(\n    () => [\n      {\n        title: 'Active Services',\n        description: 'Total active services',\n        icon: <Bundles />,\n        data: serviceNum ?? 0,\n      },\n      {\n        title: 'Service requests',\n        description: 'Total service requests',\n        icon: <Docs />,\n        data: requestsNum ?? serviceRequestsCount,\n      },\n      {\n        title: 'Draft service requests',\n        description: 'Service requests in drafts',\n        icon: <Edit />,\n        data: draftsCount,\n      },\n    ],\n    [serviceNum, requestsNum, serviceRequestsCount, draftsCount]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.banner || !urls.helpMenu || !urls.metricCards ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          {/* <div data-testid='dashboard-app-container' style={{ padding: '10px' }}> */}\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-converge-banner'\n                src={urls.banner}\n                moduleType=''\n                config={{ bannerData: BannerData }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Converge Banner'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n\n            <MetricCardWrapper>\n              <FeatureAppLoader\n                featureAppId='fa-converge-dashboard-metric-cards'\n                src={urls.metricCards}\n                moduleType=''\n                config={{\n                  metricData: true,\n                  data: metricCardData,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Converge Dashboard Metric Card'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </MetricCardWrapper>\n\n            <CardWrapper>\n              <Text $colour='full' $fontStyle='label-large-bold'>\n                What would you like to do today?\n              </Text>\n              {requestsNum !== 0 ? (\n                <OverviewCardsContainer>\n                  {/* <OverviewCards\n                    cardType={'redirect'}\n                    title={'View my reports'}\n                    icon={<Analytics />}\n                    summary={'Go to Reports'}\n                    redirectTo={'/converge/reports'}\n                    loadingState={false}\n                  ></OverviewCards> */}\n                  <OverviewCards\n                    cardType={'redirect'}\n                    title={'View your active services'}\n                    icon={<NetworkServices />}\n                    summary={'Go to Active Services'}\n                    redirectTo={'/converge/services'}\n                    loadingState={false}\n                  ></OverviewCards>\n                  {latestDraft && (\n                    <OverviewCards\n                      cardType={'redirect'}\n                      title={`Resume latest draft: ${latestDraftName}`}\n                      icon={<Edit />}\n                      summary={'Continue editing'}\n                      onClick={() => {\n                        navigationService.navigateTo(\n                          `/converge/services/request-new-service/${serviceNameMap[formType] ?? ''}`,\n                          { formData: formData, formId: formId }\n                        );\n                      }}\n                      loadingState={false}\n                    ></OverviewCards>\n                  )}\n                </OverviewCardsContainer>\n              ) : (\n                <OverviewCardsContainer>\n                  <OverviewCards\n                    cardType={'redirect'}\n                    title={'Start a new service request'}\n                    icon={<PlusWithCircle />}\n                    summary={'Request new service'}\n                    redirectTo={'/converge/services/request-new-service'}\n                    loadingState={false}\n                  ></OverviewCards>\n                  <OverviewCards\n                    cardType={'redirect'}\n                    title={'View your active services'}\n                    icon={<NetworkServices />}\n                    summary={'Go to Active Services'}\n                    redirectTo={'/converge/services'}\n                    loadingState={false}\n                  ></OverviewCards>\n                </OverviewCardsContainer>\n              )}\n            </CardWrapper>\n\n            {/* <OverviewCardsContainer>\n              <OverviewCards\n                cardType={'status'}\n                num={serviceNum}\n                caption={'Active services'}\n                icon={<Docs />}\n                summary={'Manage services'}\n                redirectTo={'/converge/services'}\n                loadingState={false}\n              ></OverviewCards>\n              <OverviewCards\n                cardType={'redirect'}\n                title={'Need a quote for your next service?'}\n                // caption={'Campaigns launched'}\n                icon={<Search />}\n                summary={'Go to Fibre Quick Quotes'}\n                redirectTo={'/quick-quotes'}\n                loadingState={false}\n              ></OverviewCards>\n            </OverviewCardsContainer> */}\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-converge-help-menu'\n                src={urls.helpMenu}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Converge Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default ConvergeDashboard;\n","import { ServiceForm } from '../models';\n\nexport const getLatestDraftForm = (serviceRequests?: ServiceForm[]): ServiceForm | undefined => {\n  if (!serviceRequests || serviceRequests.length === 0) {\n    return undefined;\n  }\n\n  const draftForms = serviceRequests.filter((form) => form.status === 'Draft');\n\n  if (draftForms.length === 0) {\n    return undefined;\n  }\n\n  draftForms.sort((a, b) => {\n    const aDate = a.technicalSpecs?.updatedAt ?? a.technicalSpecs?.createdAt ?? new Date(0);\n    const bDate = b.technicalSpecs?.updatedAt ?? b.technicalSpecs?.createdAt ?? new Date(0);\n    return bDate.getTime() - aDate.getTime();\n  });\n\n  return draftForms[0];\n};\n","import styled from 'styled-components';\n\nexport const NetworkToolsWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  /* overflow-y: auto; */\n  box-sizing: border-box;\n  padding-bottom: 20px;\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 40px 30px 40px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { NetworkToolsWrapper, HeaderWrapper } from './NetworkTools.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport LookingGlass from '../../../unauthorization/IpPortal/LookingGlass/LookingGlass';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const LookingGlassPortal = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userActiveServices } = useProfile();\n  useEffect(() => {}, [userActiveServices]);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: 'name',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header) {\n    return <Loading isLoading={true} />;\n  }\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <NetworkToolsWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          <LookingGlass />\n          {/* <Footer /> */}\n        </div>\n      </NetworkToolsWrapper>\n    </ThemeProvider>\n  );\n};\n","import styled, { css, DefaultTheme } from 'styled-components';\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography, floats } }): DefaultTheme => {\n    return css`\n      ${typography['title-large-bold']}\n      color: ${colors['text-embed-text-colour']};\n      gap: ${floats['padding-xlarge']};\n    `;\n  }}\n`;\n\nexport const Frame = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding-top: 24px;\n  align-self: stretch;\n`;\n\nexport const LeftNav = styled.div`\n  display: flex;\n  padding: var(--padding-none, 0px);\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-2xsmall, 4px);\n  align-self: stretch;\n  border-radius: var(--corner-radius-none, 0px);\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\n\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { FeatureAppContainer } from '../QuickQuotes/OverviewPage/QuickQuotesDashboard.styled';\nimport { useFeatureAppUrls } from '../../../hooks/use-fetch-feature-app-urls';\nimport Loading, { Text, OverlayStyle } from '../../../Loading/Loading';\nimport { Title } from './CentralNotifications.style';\nimport { CustomerProfile } from '../../../models';\nimport { CORRELATION_ID } from '../../../utils';\nimport { getNotification } from '../../../apis/get-notification';\nimport { deleteNotification } from '../../../apis/delete-notification';\nimport { editNotification } from '../../../apis/edit-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../utils/map-notification';\nimport { MappedNotification } from '../../../types/mapped-notification';\nimport { Modal } from '@mtnkente/paragon-overlays';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { CircularIndeterminate } from '@mtnkente/paragon-indicators';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst NotificationsCentre = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [result, setResult] = useState<boolean>(false);\n  const [message, setMessage] = useState<string>('');\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, [result]);\n\n  const handleDelete = (messageId: string): void => {\n    deleteNotification(correlationId, messageId)\n      .then(() => {\n        setMessage('Notification deleted successfully');\n        setResult(true);\n      })\n      .catch((error) => {\n        console.error(' Error deleting notification:', error);\n        setMessage('Failed to delete notification');\n        setResult(true);\n      });\n  };\n\n  const handleUpdate = (messageId: string, status: string): void => {\n    editNotification(correlationId, messageId, status)\n      .then(() => {\n        setResult(true);\n        setMessage('Notification updated successfully');\n      })\n      .catch((error) => {\n        setResult(true);\n        console.error(' Error updating notification:', error);\n        setMessage('Failed to update notification');\n      });\n  };\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      setResult(true);\n      setMessage('No notifications available to update');\n      return;\n    }\n\n    let successCount = 0;\n    let failureCount = 0;\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {\n          successCount++;\n        })\n        .catch((error) => {\n          failureCount++;\n          console.error(`Error updating notification ${messageId}:`, error);\n        })\n        .finally(() => {\n          if (successCount + failureCount === messageIds.length) {\n            setResult(true);\n            if (failureCount === 0) {\n              setMessage('All notifications updated successfully');\n            } else if (successCount > 0) {\n              setMessage(`Updated ${successCount} notifications, ${failureCount} failed`);\n            } else {\n              setMessage('Failed to update notifications');\n            }\n          }\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    notifications: process.env.REACT_APP_FA_CENTRAL_NOTIFICATIONS ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const notificationsCentreConfig = useMemo(\n    () => ({\n      type: 'notifications-centre',\n      handleDelete: handleDelete,\n      handleUpdate: handleUpdate,\n      markallread: handleAllUpdate,\n      notifications: notifications,\n    }),\n    [loading]\n  );\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      alertStatus: checkUnreadNotifications(notifications),\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Notifications',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: handleDelete,\n        handleUpdate: handleUpdate,\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [loading]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.notifications ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <Modal\n            $variant='standard'\n            buttons={\n              <StandardButton $variant='primary' label='Done' onClick={() => setResult(false)} />\n            }\n            description={message}\n            onOpenChange={function Xs() {}}\n            size='small'\n            title='Notification'\n            isOpen={result}\n          />\n\n          {!loading ? (\n            <div data-testid='dashboard-shell-container'>\n              <HeaderWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-header-notifications'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Notifications Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </HeaderWrapper>\n              <Title>Notifications centre</Title>\n              <FeatureAppContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-central-notifications'\n                  src={urls.notifications}\n                  moduleType=''\n                  config={{ notificationsData: notificationsCentreConfig }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Central Notifications'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FeatureAppContainer>\n            </div>\n          ) : (\n            <OverlayStyle>\n              <CircularIndeterminate size='large' />\n              <Text>Retrieving latest updates, please wait...</Text>\n            </OverlayStyle>\n          )}\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default NotificationsCentre;\n","import apiClient from '../interceptors/auth-interceptor';\n\ninterface NotificationResponse {\n  transactionId: string;\n  correlationId: string;\n  code: string;\n  timestamp: string;\n  data: string;\n  message: string;\n  status: number;\n}\n\nexport const deleteNotification = async (\n  correlationId: string,\n  messageId: string\n): Promise<NotificationResponse> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-delete-notifications?messageId=${messageId}`;\n\n  const response = await apiClient.delete<NotificationResponse>(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n    },\n  });\n\n  return response.data;\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\ninterface StatusTagProps {\n  colour: 'positive' | 'disabled';\n}\n\nexport const HeadingConatiner = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-none']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-2xsmall']};\n    align-self: stretch;\n  `}\n`;\n\nexport const HeadingWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n\n  @media (max-width: 768px) {\n    ${({ theme }): DefaultTheme => css`\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['padding-medium']};\n    `}\n  }\n`;\n\nexport const TableContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-xlarge']};\n    align-self: stretch;\n  `}\n`;\n\nexport const StatusTag = styled.div<StatusTagProps>`\n  ${({ theme: { colors, floats }, colour }): DefaultTheme => {\n    return css`\n      display: inline-flex;\n      padding: ${floats['padding-2xsmall']} ${floats['padding-small']};\n      align-items: center;\n      gap: ${floats['padding-2xsmall']};\n\n      border-radius: ${floats['corner-radius-medium']};\n      border: 1px solid\n        ${colour === 'positive'\n          ? colors['border-colour-success']\n          : colors['border-colour-opacity-lower-inverse']};\n      background: ${colour === 'positive'\n        ? colors['colour-surface-subtle-success']\n        : colors['colour-opacity-vibrant-inverse']};\n    `;\n  }}\n`;\n\nexport const StatusText = styled.p<StatusTagProps>`\n  ${({ theme: { colors, typography }, colour }): DefaultTheme => {\n    return css`\n      color: ${colour === 'positive'\n        ? colors['colour-success']\n        : colors['colour-opacity-high-inverse']};\n      ${typography['caption-regular']};\n\n      margin: 0;\n      padding: 0;\n    `;\n  }}\n`;\n\nexport const ButtonWrapper = styled.div`\n  @media (max-width: 768px) {\n    width: 100%;\n  }\n`;\n","import React from 'react';\nimport { UpArrowWithCircle, CloseWithCircle } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StatusTag, StatusText } from './ServiceInventory.style';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\n\nexport const columns = [\n  {\n    key: 'serviceId',\n    label: 'Service Id',\n    sortable: 'numerical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.serviceId}\n      </Text>\n    ),\n  },\n  {\n    key: 'product',\n    label: 'Product',\n    sortable: 'alphabetical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-semibold'>\n        {row.product}\n      </Text>\n    ),\n  },\n  {\n    key: 'status',\n    label: 'Status',\n    render: (): JSX.Element => (\n      <StatusTag colour='positive'>\n        <StatusIndicator $color='positive' />\n        <StatusText colour='positive'>Active</StatusText>\n      </StatusTag>\n    ),\n  },\n  {\n    key: 'bandwidth',\n    label: 'Bandwidth',\n    sortable: 'numerical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.bandwidth}\n      </Text>\n    ),\n  },\n  {\n    key: 'serviceLocations',\n    label: 'Service Location(s)',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.serviceLocation.locationA && row.serviceLocation.locationB\n          ? `${row.serviceLocation.locationA} <-> ${row.serviceLocation.locationB}`\n          : row.serviceLocation.locationA}\n      </Text>\n    ),\n  },\n];\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const expandableData = (row: any): { label: string; value: any }[] => {\n  return [\n    { label: 'Service name', value: row.additionalInfo.serviceName },\n    { label: 'SLA', value: row.additionalInfo.sla },\n    { label: 'Start Date', value: row.additionalInfo.contractStartDate },\n    { label: 'End Date', value: row.additionalInfo.contractEndDate },\n    { label: 'Circuit ID', value: row.additionalInfo.circuitId },\n    { label: 'Subsea Cable', value: row.additionalInfo.subseaCable },\n  ].filter((item) => item.value !== null && item.value !== undefined && item.value !== '');\n};\n\nexport const actionsList = [\n  {\n    label: 'Upgrade service',\n    icon: <UpArrowWithCircle />,\n    onClick: (): void => {},\n  },\n  {\n    label: 'Cancel Service',\n    icon: <CloseWithCircle />,\n    onClick: (): void => {},\n  },\n];\n\nexport const filterCategories = [\n  {\n    columnKey: 'product',\n    label: 'Product',\n    fields: ['product'],\n    options: [\n      { label: 'DIA', value: 'dia' },\n      { label: 'IPLC', value: 'iplc' },\n      { label: 'International IP Transit', value: 'international ip transit' },\n      { label: 'L2 VPN', value: 'l2 vpn' },\n      { label: 'L3 VPN', value: 'l3 vpn' },\n      { label: 'NPLC', value: 'nplc' },\n    ],\n  },\n  {\n    columnKey: 'bandwidth',\n    label: 'Bandwidth',\n    fields: ['bandwidth'],\n    options: [\n      { label: '1 Mbps', value: '1 Mbps' },\n      { label: '2 Mbps', value: '2 Mbps' },\n      { label: '3 Mbps', value: '3 Mbps' },\n      { label: '4 Mbps', value: '4 Mbps' },\n      { label: '5 Mbps', value: '5 Mbps' },\n      { label: '6 Mbps', value: '6 Mbps' },\n      { label: '8 Mbps', value: '8 Mbps' },\n      { label: '10 Mbps', value: '10 Mbps' },\n      { label: '15 Mbps', value: '15 Mbps' },\n      { label: '20 Mbps', value: '20 Mbps' },\n      { label: '30 Mbps', value: '30 Mbps' },\n      { label: '40 Mbps', value: '40 Mbps' },\n      { label: '45 Mbps', value: '45 Mbps' },\n      { label: '50 Mbps', value: '50 Mbps' },\n      { label: '60 Mbps', value: '60 Mbps' },\n      { label: '80 Mbps', value: '80 Mbps' },\n      { label: '100 Mbps', value: '100 Mbps' },\n      { label: '155 Mbps', value: '155 Mbps' },\n      { label: '200 Mbps', value: '200 Mbps' },\n      { label: '300 Mbps', value: '300 Mbps' },\n      { label: '400 Mbps', value: '400 Mbps' },\n      { label: '500 Mbps', value: '500 Mbps' },\n      { label: '600 Mbps', value: '600 Mbps' },\n      { label: '620 Mbps', value: '620 Mbps' },\n      { label: '700 Mbps', value: '700 Mbps' },\n      { label: '800 Mbps', value: '800 Mbps' },\n      { label: '900 Mbps', value: '900 Mbps' },\n      { label: '1 Gbps', value: '1 Gbps' },\n    ],\n  },\n\n  {\n    columnKey: 'serviceLocations',\n    label: 'Service Locations',\n    fields: ['serviceLocation.locationA', 'serviceLocation.locationB'],\n    options: [\n      { label: 'Angola', value: 'Angola' },\n      { label: 'Botswana', value: 'Botswana' },\n      { label: 'Burkina Faso', value: 'Burkina Faso' },\n      { label: 'Cameroon', value: 'Cameroon' },\n      { label: 'Congo B', value: 'Congo B' },\n      { label: 'Djibouti', value: 'Djibouti' },\n      { label: 'France', value: 'France' },\n      { label: 'Germany', value: 'Germany' },\n      { label: 'Ghana', value: 'Ghana' },\n      { label: 'Guinea Bissau', value: 'Guinea Bissau' },\n      { label: 'Guinea Conakry', value: 'Guinea Conakry' },\n      { label: 'Ivory Coast', value: 'Ivory Coast' },\n      { label: 'Kenya', value: 'Kenya' },\n      { label: 'Lesotho', value: 'Lesotho' },\n      { label: 'Liberia', value: 'Liberia' },\n      { label: 'Mali', value: 'Mali' },\n      { label: 'Mozambique', value: 'Mozambique' },\n      { label: 'Namibia', value: 'Namibia' },\n      { label: 'Netherlands', value: 'Netherlands' },\n      { label: 'Niger', value: 'Niger' },\n      { label: 'Nigeria', value: 'Nigeria' },\n      { label: 'Rwanda', value: 'Rwanda' },\n      { label: 'South Africa', value: 'South Africa' },\n      { label: 'South Sudan', value: 'South Sudan' },\n      { label: 'Sudan', value: 'Sudan' },\n      { label: 'Swaziland', value: 'Swaziland' },\n      { label: 'Tanzania', value: 'Tanzania' },\n      { label: 'Togo', value: 'Togo' },\n      { label: 'Uganda', value: 'Uganda' },\n      { label: 'United Arab Emirates', value: 'United Arab Emirates' },\n      { label: 'United Kingdom', value: 'United Kingdom' },\n      { label: 'Zambia', value: 'Zambia' },\n    ],\n  },\n];\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserSymbol, PlusWithCircle, UserGroup } from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { actionsList, columns, expandableData, filterCategories } from './ServiceInventory.config';\nimport { HeadingConatiner, HeadingWrapper, TableContainer } from './ServiceInventory.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile, ServiceInfo } from '../../../../models';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { useNavigate } from 'react-router-dom';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\ninterface ServiceInventoryProps {\n  data: ServiceInfo[] | undefined;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const ServiceInventory = ({\n  data,\n  profile,\n  isSupueruser,\n  logoutF,\n}: ServiceInventoryProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userServiceInventory } = useProfile();\n  const [serviceInventory, setServiceInventory] = React.useState<ServiceInfo[] | undefined>(\n    undefined\n  );\n  //const [upgradeRequests, setUpgradeRequests] = useState<UpgradeRequest[]>([]);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const navigate = useNavigate();\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // useEffect(() => {\n  //   if (!profile?.emailAddress) return;\n  //   let polling = true;\n  //   const fetchUpgradeRequests = async (): Promise<void> => {\n  //     const token = localStorage.getItem('accessToken');\n  //     try {\n  //       const requests = await getUpgradeRequests(profile.emailAddress, correlationId, token!);\n  //       const now = new Date();\n  //       const nowYear = now.getFullYear();\n  //       const nowMonth = now.getMonth();\n  //       const nowDate = now.getDate();\n  //       const nowHour = now.getHours();\n  //       const nowMinute = now.getMinutes();\n  //       const filtered = (requests.data ?? []).filter((req) => {\n  //         if (!req.nextSubmissionAt) return true;\n  //         const next = new Date(req.nextSubmissionAt);\n  //         if (next.getFullYear() < nowYear) return false;\n  //         if (next.getFullYear() > nowYear) return true;\n  //         if (next.getMonth() < nowMonth) return false;\n  //         if (next.getMonth() > nowMonth) return true;\n  //         if (next.getDate() < nowDate) return false;\n  //         if (next.getDate() > nowDate) return true;\n  //         if (next.getHours() < nowHour) return false;\n  //         if (next.getHours() > nowHour) return true;\n  //         if (next.getMinutes() < nowMinute) return false;\n  //         return true;\n  //       });\n  //       setUpgradeRequests(filtered);\n  //     } catch (error) {\n  //       //edge case here\n  //     }\n  //   };\n  //   fetchUpgradeRequests().catch(() => {});\n\n  //   const intervalId = setInterval(() => {\n  //     if (polling) fetchUpgradeRequests().catch(() => {});\n  //   }, 5000);\n  //   return (): any => {\n  //     polling = false;\n  //     clearInterval(intervalId);\n  //   };\n  // }, [profile]);\n\n  useEffect(() => {\n    const retrievedData = data && data.length > 0 ? data : userServiceInventory;\n    if (retrievedData && retrievedData.length > 0) {\n      localStorage.setItem('convergeServiceInventory', JSON.stringify(retrievedData));\n    }\n  }, [data, userServiceInventory]);\n\n  useEffect(() => {\n    const storedData = localStorage.getItem('convergeServiceInventory');\n    if (storedData) {\n      setServiceInventory(JSON.parse(storedData));\n    }\n  }, []);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Services',\n      title: 'Post Login',\n      backIcon: true,\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-services'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Services Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      Active services\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      Manage your Network-as-a-Service services here.\n                    </Text>\n                  </HeadingConatiner>\n                  <StandardButton\n                    icon={<PlusWithCircle />}\n                    label='Request New Service'\n                    onClick={() => navigate('/converge/services/request-new-service')}\n                  />\n                </HeadingWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-converge-service-inventory'\n                  src={urls.table}\n                  moduleType=''\n                  config={{\n                    columns: columns,\n                    data:\n                      data && data.length > 0\n                        ? data\n                        : userServiceInventory && userServiceInventory.length > 0\n                          ? userServiceInventory\n                          : serviceInventory,\n                    hasActions: true,\n                    actionsList: actionsList,\n                    isExpandable: true,\n                    expandableData: expandableData,\n                    filterCategories: filterCategories,\n                    //upgradedServices: upgradeRequests,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Service Inventory Table'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nexport const SendAnEmailFormContent = {\n  title: 'Need help?',\n\n  formSections: [\n    {\n      title: 'What do you need help with?',\n      fields: [\n        {\n          label: 'Select Subject',\n          name: 'subject',\n          type: 'dropdown',\n          options: [\n            { label: 'General: General Support Request ' },\n            { label: 'Service Management: Request Service Upgrade ' },\n            { label: 'Service Management: Request Service Cancellation ' },\n            { label: 'Sales: Request for New Service Information ' },\n            { label: 'Support: Service Not Displayed in Inventory ' },\n            { label: 'Performance: Service Performance Concern' },\n            { label: 'Follow-up: Follow-Up on Existing Request ' },\n            { label: 'Other ' },\n          ],\n          isOptional: false,\n        },\n      ],\n    },\n    {\n      title: 'Query information',\n      fields: [\n        {\n          label: 'Provide info about your query',\n          name: 'additional-info',\n          type: 'textarea',\n          isOptional: false,\n        },\n      ],\n    },\n  ],\n  buttonLabel: 'Submit Request',\n  buttonStatus: true,\n  handleSubmit: (): void => {},\n};\n","import styled from 'styled-components';\n\nexport const FormContainer = styled.div`\n  margin-top: 2rem;\n  padding: var(--padding-xlarge, 32px) var(--padding-large, 24px);\n  border-radius: var(--corner-radius-medium, 24px);\n  background: var(--colour-surface-full, #fff);\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  FeatureAppContainer,\n  DashboardWrapper,\n  HeaderWrapper,\n} from '../../customerportal/Dashboard/Dashboard.style';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { SendAnEmailFormContent } from './send-email.config';\nimport { FormContainer } from './SendAnEmail.styled';\nimport { CustomerProfile } from '../../../../models';\nimport { ContainerWrapper } from '../../../authorization/QuickQuotes/ProductList/ProductList.style';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface SendAnEmailProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const SendConvergeEmail = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: SendAnEmailProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const userInfo = {\n    name: profile?.fullName ?? '',\n    phoneNumber: profile?.contactNumber ?? '',\n    emailAddress: profile?.emailAddress ?? '',\n    company: profile?.companyDetails?.name ?? '',\n    country: profile?.companyDetails?.address?.country ?? '',\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: user?.name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Send an email',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n    quoteSummary: process.env.REACT_APP_FA_QUOTE_SUMMARY_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  if (!urls.header || !urls.connectForm || !urls.quoteSummary) {\n    return <Loading isLoading={true} />;\n  }\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n          <div>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-send-an-email'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Send an email Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <ContainerWrapper>\n              <FormContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-send-email'\n                  src={urls.connectForm}\n                  moduleType=''\n                  config={{\n                    data: SendAnEmailFormContent,\n                    currentUrl: '/converge/email-support',\n                    userInfo: { userInfo },\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Send Email'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FormContainer>\n\n              <FeatureAppContainer>\n                <FeatureAppLoader\n                  featureAppId='fa-email-summary-card'\n                  src={urls.quoteSummary}\n                  moduleType=''\n                  config={{\n                    state: '',\n                    buttonVisibility: false,\n                    dataSets: [],\n                    emailScreen: true,\n                    currentUrl: 'quotes',\n                    request: false,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quote'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </FeatureAppContainer>\n            </ContainerWrapper>\n          </div>\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    // display: flex;\n    width: 100%;\n    // padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n    //   ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n    // background: ${theme.colors['colour-surface-full-inverse']};\n    // background: #44536a;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\nexport const FeatureAppContainerFAQ = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const Wrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n","export const faqAccordionContent = [\n  {\n    title: 'What is Converge?',\n    content:\n      'Converge is Bayobab Central’s self-service platform for managing their Fixed Connectivity Solutions. It allows customers to request new services, submit detailed technical requirements, generate budgetary quotes, and track their active Fixed Connectivity services.',\n  },\n  {\n    title: 'Who can access Converge?',\n    content:\n      'Converge is currently available to Bayobab’s Fixed Connectivity customers (with or without and active service). If you’re interested in these products but don’t yet have access, you can explore them via the Products & Services page on the Customer Portal.',\n  },\n  {\n    title: 'How do I view my active services?',\n    content:\n      'You can view all your active services by navigating to the Service Inventory section after logging into Converge. There you’ll find details like service ID, name, bandwidth, and locations.',\n  },\n  {\n    title: 'How do I request a new Fibre service?',\n    content:\n      'Start by visiting the Service Requests section in Converge. From there, you can: \\n1. Select the product you’re interested in. \\n2. Choose to generate a Quick Quote first (for supported products), or \\n3. Go straight to the Technical Specification Form to submit a firm offer request.',\n  },\n  {\n    title: 'What is a Quick Quote?',\n    content:\n      'A Quick Quote is a fast way to get an estimated budgetary quotecost (NRC & MRC) for standard Fixed Connectivity products (L2 VPN and DIA). It’s based on country-level location plus capacity input and helps you evaluate pricing before submitting a full request. Quotes are not binding and don’t reserve services. Firm pricing is subject to feasibility.',\n  },\n  {\n    title: 'Can I skip the Quick Quote step?',\n    content:\n      'Yes. You can go directly to the Technical Specification Form (TSF) if you already know the details of the service you want and are ready to request a firm offer.',\n  },\n  {\n    title: 'What is a Technical Specification Form (TSF)?',\n    content:\n      'The TSF is used to submit detailed requirements for a new Fixed Connectivity service. It includes exact location coordinates, bandwidth preferences, contract terms, and other product-specific details. Once submitted, our team will respond with a firm offer.',\n  },\n  {\n    title: 'Can I save my progress while completing a TSF?',\n    content:\n      'Yes. You can save your request as a draft and return to complete it later. All saved drafts appear under the Service Requests page.',\n  },\n  {\n    title: 'Where can I view my submitted or draft requests?',\n    content:\n      'Go to the Service Requests page in Converge to see: \\n1. Draft requests (in-progress) \\n2. Submitted requests (pending or completed)\\nEach request shows the product name, request status, and submission date.',\n  },\n  {\n    title: 'How do I upgrade an existing service?',\n    content:\n      'Find the service in the Service Inventory and click Request Upgrade. You can only submit one upgrade request at a time for a service. If a request is already pending, you’ll need to wait before sending another.',\n  },\n  {\n    title: 'I submitted an upgrade request but haven’t received feedback. What should I do?',\n    content:\n      'Upgrade requests have a 24-hour cooldown before a new one can be submitted. After this period, you’ll be able to either send a reminder or submit a new request if needed.',\n  },\n  {\n    title: 'What happens after I submit a service request?',\n    content:\n      'Our team will review your submitted TSF and respond with a firm offer. Once approved, we’ll proceed to service provisioning and setup. You’ll be notified via email and can track the request status on the platform.',\n  },\n  {\n    title: 'Can I delete a draft service request?',\n    content:\n      'Yes. You can delete any draft from the Service Requests page. Once deleted, the request cannot be recovered.',\n  },\n  {\n    title: 'How long are drafts kept?',\n    content:\n      'Drafts are automatically deleted 30 days after their last save date if they haven’t been submitted.',\n  },\n  {\n    title: 'Who do I contact for help or support?',\n    content:\n      'If you need assistance, you can use the Support section in Converge to log a ticket, or reach out directly to your assigned Account Manager.',\n  },\n];\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Container = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-3xlarge']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 8px;\n    align-self: stretch;\n\n    border-radius: 24px;\n    background: #fff;\n    /* background-color: ${theme.colors['page-bg-colour-full']}; */\n  `}\n`;\n\nexport const Content = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-medium']};\n    align-self: stretch;\n  `}\n`;\n\nexport const Title = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    flex: 1 0 0;\n    color: ${theme.colors['text-embed-text-colour']};\n    ${theme.typography['title-small-bold']};\n  `}\n`;\n","import React from 'react';\nimport { Container, Content, Title } from './ImportantInfo.styled';\nimport { TextLink } from '@mtnkente/paragon-buttons';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { navigationService } from '../../../../..';\n\nconst ImportantInfo = (): JSX.Element => {\n  const clickHandler = (): void => {\n    navigationService?.navigateTo('/converge/terms-and-conditions');\n  };\n\n  return (\n    <ThemeProvider platform='bayobab' mode='light'>\n      <Container>\n        <Content>\n          <Title>Important Information</Title>\n          <TextLink\n            $size='small'\n            label='View our Terms and Conditions.'\n            onClick={clickHandler}\n            href={'javascript:void(0)'}\n          />\n        </Content>\n      </Container>\n    </ThemeProvider>\n  );\n};\n\nexport default ImportantInfo;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer, FeatureAppContainerFAQ, Wrapper } from './SupportTicket.styled';\nimport { HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Accordion, AccordionItem } from '@mtnkente/paragon-display';\nimport { AccordionWrap, FaqHeader } from '../../whatsappBsp/SupportAndFaqs/SupportAndFaqs.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { faqAccordionContent } from './faq.config';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport ImportantInfo from './ImportantInfo';\n\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst SupportTicket = ({ name, profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    helpMenu: process.env.REACT_APP_FA_HELP_MENU ?? '',\n    supportTicket: process.env.REACT_APP_SUPPORT_TICKET_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Support & FAQs',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.supportTicket ? (\n        <Loading isLoading={true} />\n      ) : (\n        <Wrapper data-testid='quick-quote-support-ticket-app-container'>\n          <div>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='Quick Quote FAQ Header'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'latency matrix Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-converge-support-ticket'\n                src={urls.supportTicket}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n            <FeatureAppContainerFAQ>\n              <AccordionWrap>\n                <FaqHeader>Frequently Asked Questions</FaqHeader>\n                {faqAccordionContent.map((item, index) => (\n                  <Accordion key={index}>\n                    <AccordionItem title={item.title} value={`item-${index}`}>\n                      {item.content}\n                    </AccordionItem>\n                  </Accordion>\n                ))}\n              </AccordionWrap>\n            </FeatureAppContainerFAQ>\n\n            <FeatureAppContainer>\n              <ImportantInfo />\n            </FeatureAppContainer>\n          </div>\n        </Wrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default SupportTicket;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { NetworkToolsWrapper, HeaderWrapper } from './NetworkTools.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport PeeringList from '../../../unauthorization/IpPortal/PeeringPolicy/PeeringList';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nexport const PeeringListPortal = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userActiveServices } = useProfile();\n  useEffect(() => {}, [userActiveServices]);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: 'name',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header) {\n    return <Loading isLoading={true} />;\n  }\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <NetworkToolsWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          <PeeringList />\n          {/* <Footer /> */}\n        </div>\n      </NetworkToolsWrapper>\n    </ThemeProvider>\n  );\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { NetworkToolsWrapper, HeaderWrapper } from './NetworkTools.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport PeeringPolicy from '../../../unauthorization/IpPortal/PeeringPolicy/PeeringPolicy';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const PeeringPolicyPortal = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userActiveServices } = useProfile();\n  useEffect(() => {}, [userActiveServices]);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: 'name',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header) {\n    return <Loading isLoading={true} />;\n  }\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <NetworkToolsWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          <PeeringPolicy />\n          {/* <Footer /> */}\n        </div>\n      </NetworkToolsWrapper>\n    </ThemeProvider>\n  );\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { NetworkToolsWrapper, HeaderWrapper } from './NetworkTools.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport PeeringRequest from '../../../unauthorization/IpPortal/PeeringPolicy/PeeringRequest';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const PeeringRequestPortal = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { userActiveServices } = useProfile();\n  useEffect(() => {}, [userActiveServices]);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: 'name',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header) {\n    return <Loading isLoading={true} />;\n  }\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <NetworkToolsWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          <PeeringRequest />\n          {/* <Footer /> */}\n        </div>\n      </NetworkToolsWrapper>\n    </ThemeProvider>\n  );\n};\n","import {\n  CONVERGE_PAGE,\n  CONVERGE_SUPPORT_AND_FAQS_PAGE,\n  DARK_FIBRE_PAGE,\n  DASHBOARD,\n  DIA_PAGE,\n  DISCLAIMER_PAGE,\n  EMAIL_SUPPORT_PAGE,\n  FEEDBACK_PAGE,\n  IPLC_PAGE,\n  IPT_PAGE,\n  L2VPN_PAGE,\n  L3VPN_PAGE,\n  LOG_SUPPORT_TICKET_PAGE,\n  LOOKING_GLASS,\n  NPLC_PAGE,\n  PEERING_LIST,\n  PEERING_POLICY,\n  PEERING_REQUEST,\n  Privacy_Notice,\n  PROFILE,\n  PUBLIC_CLOUD_ACCESS_PAGE,\n  QUICK_QOUTES_CUSTOMISE_PRODUCT_PAGE,\n  QUICK_QUOTES_DETAILS_TABLE_PAGE,\n  QUICK_QUOTES_OVERVIEW_PAGE,\n  QUICK_QUOTES_PAGE,\n  QUICK_QUOTES_PRODUCT_PAGE,\n  QUICK_QUOTES_SUPPORT_PAGE,\n  QUICK_QUOTES_TERMS_AND_CONDITIONS_PAGE,\n  SAVED_QUOTES_PAGE,\n  SERVICE_INVENTORY_PAGE,\n  TERMS_OF_USE,\n  UPCOMING_SERVICES_PAGE,\n  WABSP_API_DOC,\n  WHATSAPP_ACCOUNT_MANAGEMENT_PAGE,\n  WHATSAPP_CAMPAIGNS_PAGE,\n  WHATSAPP_MESSAGE_TEMPLATES_PAGE,\n  WHATSAPP_OVERVIEW_PAGE,\n  WHATSAPP_SUPPORT_PAGE,\n} from './constants';\n\nexport const getTitle = (path: string): string => {\n  switch (path) {\n    case LOOKING_GLASS:\n      return 'Looking Glass | Bayobab Central';\n    case TERMS_OF_USE:\n      return 'TERMS OF USE | Bayobab Central';\n    case WABSP_API_DOC:\n      return 'WABSP API DOC | Bayobab Central';\n    case Privacy_Notice:\n      return 'Privacy Notice | Bayobab Central';\n    case PEERING_POLICY:\n      return 'Peering Policy | Bayobab Central';\n    case PEERING_LIST:\n      return 'Peering List | Bayobab Central';\n    case PEERING_REQUEST:\n      return 'Peering Request | Bayobab Central';\n    case DASHBOARD:\n      return 'Dashboard | Bayobab Central';\n    case PROFILE:\n      return 'Profile | Bayobab Central';\n    case FEEDBACK_PAGE:\n      return 'Provide Feedback | Bayobab Central';\n    case UPCOMING_SERVICES_PAGE:\n      return 'Upcoming Services | Bayobab Central';\n    case LOG_SUPPORT_TICKET_PAGE:\n      return 'Support | Bayobab Central';\n    case DISCLAIMER_PAGE:\n      return 'Disclaimer | Bayobab Central';\n    case WHATSAPP_OVERVIEW_PAGE:\n      return 'WhatsApp Business Messaging | Bayobab Central';\n    case QUICK_QUOTES_OVERVIEW_PAGE:\n    case QUICK_QUOTES_PAGE:\n      return 'Quick Quotes | Bayobab Central';\n    case WHATSAPP_MESSAGE_TEMPLATES_PAGE:\n      return 'Message Templates | Bayobab Central';\n    case WHATSAPP_CAMPAIGNS_PAGE:\n      return 'Campaigns | Bayobab Central';\n    case WHATSAPP_SUPPORT_PAGE:\n      return 'Support & FAQs | Bayobab Central';\n    case WHATSAPP_ACCOUNT_MANAGEMENT_PAGE:\n      return 'Account Management | Bayobab Central';\n    case QUICK_QUOTES_SUPPORT_PAGE:\n      return 'Support & FAQs | Bayobab Central';\n    case SAVED_QUOTES_PAGE:\n      return 'Saved Quotes | Bayobab Central';\n    case QUICK_QUOTES_DETAILS_TABLE_PAGE:\n      return 'Details | Bayobab Central';\n    case QUICK_QUOTES_TERMS_AND_CONDITIONS_PAGE:\n      return 'Terms and Conditions | Bayobab Central';\n    case QUICK_QUOTES_PRODUCT_PAGE:\n      return 'Add Product | Bayobab Central';\n    case QUICK_QOUTES_CUSTOMISE_PRODUCT_PAGE:\n      return 'Customise Product | Bayobab Central';\n    case L2VPN_PAGE:\n      return 'L2VPN | Bayobab Central';\n    case IPT_PAGE:\n      return 'IPT | Bayobab Central';\n    case EMAIL_SUPPORT_PAGE:\n      return 'Send an Email | Bayobab Central';\n    case DIA_PAGE:\n      return 'DIA | Bayobab Central';\n    case L3VPN_PAGE:\n      return 'L3VPN | Bayobab Central';\n    case IPLC_PAGE:\n      return 'IPLC | Bayobab Central';\n    case DARK_FIBRE_PAGE:\n      return 'Dark Fibre | Bayobab Central';\n    case NPLC_PAGE:\n      return 'NPLC | Bayobab Central';\n    case PUBLIC_CLOUD_ACCESS_PAGE:\n      return 'Public Cloud Access | Bayobab Central';\n    case CONVERGE_PAGE:\n      return 'Converge | Bayobab Central';\n    case SERVICE_INVENTORY_PAGE:\n      return 'Services | Bayobab Central';\n    case CONVERGE_SUPPORT_AND_FAQS_PAGE:\n      return 'Support & FAQs | Bayobab Central';\n    default:\n      return 'Welcome | Bayobab Central';\n  }\n};\n","import { LOOKING_GLASS, PEERING_POLICY } from './constants';\n\nexport const getDescription = (path: string): string => {\n  switch (path) {\n    case LOOKING_GLASS:\n      return 'Seamlessly access vital information related to backbone routing and network efficiency.';\n    case PEERING_POLICY:\n      return 'Our peering policy governs how we connect with other networks.';\n    default:\n      return 'Experience Bayobab Central, convenience of seamlessly managing all your network and communication services and applications in one place';\n  }\n};\n","export const maxILADistance = ['60 km', '70 km', '80 km', '90 km', '100 km', '110 km', '120 km'];\n\nexport const fibreRoute = ['Linear', 'Ring'];\n\nexport const diaTechnicalSpecBandwidths = [\n  '1 Mbps',\n  '2 Mbps',\n  '3 Mbps',\n  '4 Mbps',\n  '5 Mbps',\n  '6 Mbps',\n  '7 Mbps',\n  '8 Mbps',\n  '9 Mbps',\n  '10 Mbps',\n  '15 Mbps',\n  '20 Mbps',\n  '30 Mbps',\n  '40 Mbps',\n  '50 Mbps',\n  '60 Mbps',\n  '70 Mbps',\n  '80 Mbps',\n  '90 Mbps',\n  '100 Mbps',\n  '150 Mbps',\n  '200 Mbps',\n  '250 Mbps',\n  '300 Mbps',\n  '400 Mbps',\n  '500 Mbps',\n  '600 Mbps',\n  '700 Mbps',\n  '750 Mbps',\n  '800 Mbps',\n  '900 Mbps',\n  '1 Gbps',\n  '1.5 Gbps',\n  '2 Gbps',\n  '2.5 Gbps',\n  '3 Gbps',\n  '4 Gbps',\n  '5 Gbps',\n  '7.5 Gbps',\n  '10 Gbps',\n];\n\nexport const diaProtectionTypes = [\n  'Unprotected',\n  'Protected Single Handoff (Failover managed by MTN)',\n  'Protected two Diverse Circuits (Failover managed by Customer)',\n];\n\nexport const diaPreferredTechnology = ['Microwave', 'Fibre', 'Any'];\n\nexport const publicIpSubnet = ['/29', '/30', 'Other'];\n\nexport const locationCategory = [\n  'Data Center (DC)',\n  'Cable Landing Station (CLS)',\n  'Point of Presence (PoP)',\n  'Office',\n  'Customer Location',\n];\n\nexport const bandwidths = [\n  '10 Gbps',\n  '20 Gbps',\n  '30 Gbps',\n  '40 Gbps',\n  '50 Gbps',\n  '60 Gbps',\n  '70 Gbps',\n  '80 Gbps',\n  '90 Gbps',\n  '100 Gbps',\n  '200 Gbps',\n  '300 Gbps',\n  '400 Gbps',\n  '500 Gbps',\n  '600 Gbps',\n  '700 Gbps',\n  '800 Gbps',\n  '900 Gbps',\n  '1 Tbps',\n];\n\nexport const primarySubseaCables = [\n  'ACE',\n  'WACS',\n  'EASSy',\n  'SEACOM',\n  'EASSy/AAE1',\n  'EIG',\n  'GLO',\n  'EASSy/SMW5',\n  'SAT3',\n  'SMW5',\n  'MainOne',\n  'AAE1',\n  'EASSy/EIG',\n  'SAFE',\n  'PEACE',\n  'ACE/EIG',\n  'SAS1',\n  'SAS2',\n  'Equiano',\n  'DARE1',\n  'TEAMs',\n  'DARE/EIG',\n  'DARE/AAE1',\n  '2Africa East',\n  '2Africa West',\n  '2Africa East/EIG',\n  'EASSY/WACS',\n  'EASSy/PEACE',\n  'Other Cables',\n];\n\nexport const handoffInterfaceTypes = [\n  '1G',\n  '10G LANPHY',\n  '10G WANPHY',\n  '100G LANPHY',\n  '100G WANPHY',\n  'STM-1',\n  'STM-4',\n  'STM-16',\n  'STM-64',\n  'OTU2',\n  'OTU4',\n];\n\nexport const backhaulProtectionOptions = [\n  'Unprotected (Silver SLA)',\n  'Protected Single Handoff (Gold SLA)',\n  'Protected Dual Handoff - Considered as two separate Links on same Subsea (Silver SLA)',\n];\n\nexport const allCountries = [\n  'South Africa',\n  'Afghanistan',\n  'Albania',\n  'Algeria',\n  'Andorra',\n  'Angola',\n  'Antigua and Barbuda',\n  'Argentina',\n  'Armenia',\n  'Australia',\n  'Austria',\n  'Azerbaijan',\n  'Bahamas',\n  'Bahrain',\n  'Bangladesh',\n  'Barbados',\n  'Belarus',\n  'Belgium',\n  'Belize',\n  'Benin',\n  'Bhutan',\n  'Bolivia',\n  'Bosnia and Herzegovina',\n  'Botswana',\n  'Brazil',\n  'Brunei',\n  'Bulgaria',\n  'Burkina Faso',\n  'Burundi',\n  'Cabo Verde',\n  'Cambodia',\n  'Cameroon',\n  'Canada',\n  'Central African Republic',\n  'Chad',\n  'Chile',\n  'China',\n  'Colombia',\n  'Comoros',\n  'Costa Rica',\n  'Côte d’Ivoire',\n  'Croatia',\n  'Cuba',\n  'Cyprus',\n  'Czech Republic',\n  'Democratic Republic of the Congo',\n  'Denmark',\n  'Djibouti',\n  'Dominica',\n  'Dominican Republic',\n  'Ecuador',\n  'Egypt',\n  'El Salvador',\n  'Equatorial Guinea',\n  'Eritrea',\n  'Estonia',\n  'Eswatini',\n  'Ethiopia',\n  'Fiji',\n  'Finland',\n  'France',\n  'Gabon',\n  'Gambia',\n  'Georgia',\n  'Germany',\n  'Ghana',\n  'Greece',\n  'Grenada',\n  'Guatemala',\n  'Guinea',\n  'Guinea-Bissau',\n  'Guyana',\n  'Haiti',\n  'Holy See',\n  'Honduras',\n  'Hungary',\n  'Iceland',\n  'India',\n  'Indonesia',\n  'Iran',\n  'Iraq',\n  'Ireland',\n  'Israel',\n  'Italy',\n  'Jamaica',\n  'Japan',\n  'Jordan',\n  'Kazakhstan',\n  'Kenya',\n  'Kiribati',\n  'Kosovo',\n  'Kuwait',\n  'Kyrgyzstan',\n  'Laos',\n  'Latvia',\n  'Lebanon',\n  'Lesotho',\n  'Liberia',\n  'Libya',\n  'Liechtenstein',\n  'Lithuania',\n  'Luxembourg',\n  'Madagascar',\n  'Malawi',\n  'Malaysia',\n  'Maldives',\n  'Mali',\n  'Malta',\n  'Marshall Islands',\n  'Mauritania',\n  'Mauritius',\n  'Mexico',\n  'Micronesia',\n  'Moldova',\n  'Monaco',\n  'Mongolia',\n  'Montenegro',\n  'Morocco',\n  'Mozambique',\n  'Myanmar',\n  'Namibia',\n  'Nauru',\n  'Nepal',\n  'Netherlands',\n  'New Zealand',\n  'Nicaragua',\n  'Niger',\n  'Nigeria',\n  'North Korea',\n  'North Macedonia',\n  'Norway',\n  'Oman',\n  'Pakistan',\n  'Palau',\n  'Panama',\n  'Papua New Guinea',\n  'Paraguay',\n  'Peru',\n  'Philippines',\n  'Poland',\n  'Portugal',\n  'Qatar',\n  'Republic of the Congo',\n  'Romania',\n  'Russia',\n  'Rwanda',\n  'Saint Kitts and Nevis',\n  'Saint Lucia',\n  'Saint Vincent and the Grenadines',\n  'Samoa',\n  'San Marino',\n  'Sao Tome and Principe',\n  'Saudi Arabia',\n  'Senegal',\n  'Serbia',\n  'Seychelles',\n  'Sierra Leone',\n  'Singapore',\n  'Slovakia',\n  'Slovenia',\n  'Solomon Islands',\n  'Somalia',\n\n  'South Korea',\n  'South Sudan',\n  'Spain',\n  'Sri Lanka',\n  'Sudan',\n  'Suriname',\n  'Sweden',\n  'Switzerland',\n  'Syria',\n  'Tajikistan',\n  'Tanzania',\n  'Thailand',\n  'Timor-Leste',\n  'Togo',\n  'Tonga',\n  'Trinidad and Tobago',\n  'Tunisia',\n  'Turkey',\n  'Turkmenistan',\n  'Tuvalu',\n  'Uganda',\n  'Ukraine',\n  'United Arab Emirates',\n  'United Kingdom',\n  'United States',\n  'Uruguay',\n  'Uzbekistan',\n  'Vanuatu',\n  'Vatican City',\n  'Venezuela',\n  'Vietnam',\n  'Yemen',\n  'Zambia',\n  'Zimbabwe',\n];\n\nexport const crossConnect = ['Required', 'Not Required'];\n\nexport const nplcBandwidths = [\n  '1 Mbps',\n  '2 Mbps',\n  '3 Mbps',\n  '4 Mbps',\n  '5 Mbps',\n  '6 Mbps',\n  '7 Mbps',\n  '8 Mbps',\n  '9 Mbps',\n  '10 Mbps',\n  '15 Mbps',\n  '20 Mbps',\n  '30 Mbps',\n  '40 Mbps',\n  '50 Mbps',\n  '60 Mbps',\n  '70 Mbps',\n  '80 Mbps',\n  '90 Mbps',\n  '100 Mbps',\n  '150 Mbps',\n  '200 Mbps',\n  '250 Mbps',\n  '300 Mbps',\n  '400 Mbps',\n  '500 Mbps',\n  '600 Mbps',\n  '700 Mbps',\n  '750 Mbps',\n  '800 Mbps',\n  '900 Mbps',\n  '1 Gbps',\n  '1.5 Gbps',\n  '2 Gbps',\n  '2.5 Gbps',\n  '3 Gbps',\n  '4 Gbps',\n  '5 Gbps',\n  '7.5 Gbps',\n  '10 Gbps',\n  '20 Gbps',\n  '30 Gbps',\n  '40 Gbps',\n  '50 Gbps',\n  '60 Gbps',\n  '70 Gbps',\n  '80 Gbps',\n  '90 Gbps',\n  '100 Gbps',\n  '200 Gbps',\n  '300 Gbps',\n  '400 Gbps',\n  '500 Gbps',\n  '600 Gbps',\n  '700 Gbps',\n  '800 Gbps',\n  '900 Gbps',\n  '1 Tbps',\n];\n\nexport const nplcHandoffInterfaceTypes = [\n  '1G',\n  '10G LANPHY',\n  '10G WANPHY',\n  '100G LANPHY',\n  '100G WANPHY',\n  'STM-1',\n  'STM-4',\n  'STM-16',\n  'STM-64',\n  'OTU2',\n  'OTU4',\n];\n\nexport const nplcProtectionOptions = [\n  'Unprotected',\n  'Protected Single Handoff (Failover managed by MTN)',\n  'Protected two Diverse Circuits (Failover managed by Customer)',\n];\n\nexport const leoSelectTargetSegment = [\n  'Aviation',\n  'Government',\n  'MarineEnterprise',\n  'Mobile Network Operators (Cellular Backhaul)',\n  'Tourism',\n  'Mining',\n  'Other',\n];\n\nexport const leoIntendedUseCase = [\n  'Emergency',\n  'Mobility',\n  'Primary Site',\n  'Remote Site',\n  'Redundancy',\n  'Other',\n];\n\nexport const leoRequiredTrafficVolume = ['Unlimited', '50GB', '100GB', '500GB', '1TB'];\n\nexport const pcaBandwidth = [\n  '10 Mbps',\n  '50 Mbps',\n  '100 Mbps',\n  '500 Mbps',\n  '1 Gbps',\n  '2 Gbps',\n  '3 Gbps',\n  '4 Gbps',\n  '5 Gbps',\n  '6 Gbps',\n  '7 Gbps',\n  '8 Gbps',\n  '9 Gbps',\n  '10 Gbps',\n];\n\nexport const pcaRegionOptions = ['South Africa', 'Europe', 'Ireland', 'Other'];\n\nexport const pcaCloudServiceProviders = [\n  'Microsoft',\n  'Amazon',\n  'Google',\n  'Oracle',\n  'Salesforce',\n  'Huawei Cloud',\n];\n\nexport const ipTransitBandwidth = [\n  '100 Mbps',\n  '500 Mbps',\n  '1 Gbps',\n  '2.5 Gbps',\n  '10 Gbps',\n  '40 Gbps',\n  '100 Gbps',\n];\n\nexport const ipTransitServiceOptions = [\n  'International IPT',\n  'National IPT',\n  'Regional IPT',\n  'OTT Connect',\n];\n","export const l3vpnBandwidths = [\n  '1 Mbps',\n  '2 Mbps',\n  '3 Mbps',\n  '4 Mbps',\n  '5 Mbps',\n  '6 Mbps',\n  '7 Mbps',\n  '8 Mbps',\n  '9 Mbps',\n  '10 Mbps',\n  '15 Mbps',\n  '20 Mbps',\n  '30 Mbps',\n  '40 Mbps',\n  '50 Mbps',\n  '60 Mbps',\n  '70 Mbps',\n  '80 Mbps',\n  '90 Mbps',\n  '100 Mbps',\n  '150 Mbps',\n  '200 Mbps',\n  '250 Mbps',\n  '300 Mbps',\n  '400 Mbps',\n  '500 Mbps',\n  '600 Mbps',\n  '700 Mbps',\n  '750 Mbps',\n  '800 Mbps',\n  '900 Mbps',\n  '1 Gbps',\n  '1.5 Gbps',\n  '2 Gbps',\n  '2.5 Gbps',\n  '3 Gbps',\n  '4 Gbps',\n  '5 Gbps',\n  '7.5 Gbps',\n  '10 Gbps',\n];\n\nexport const l3vpnHandoffInterfaceType = [\n  'Electrical (RJ45)',\n  'Optical (LCPC)',\n  'Optical (SCPC)',\n  'Optical (FCPC)',\n  'Optical (E2000)',\n];\n\nexport const l3vpnProtectionType = [\n  'Unprotected (Silver SLA)',\n  'Protected - Single POP Dual Lastmile (Gold SLA)',\n  'Protected - Dual POP Delivered as two Seperate Circuits (Platinium SLA)',\n];\n\nexport const l3vpnPreferredLastMileTechnology = ['Microwave', 'Fibre', 'Any'];\n\nexport const l3vpnNniInterface = ['1G', '10G'];\nexport const l2vpnBandwidths = [\n  '1 Mbps',\n  '2 Mbps',\n  '3 Mbps',\n  '4 Mbps',\n  '5 Mbps',\n  '6 Mbps',\n  '7 Mbps',\n  '8 Mbps',\n  '9 Mbps',\n  '10 Mbps',\n  '15 Mbps',\n  '20 Mbps',\n  '30 Mbps',\n  '40 Mbps',\n  '50 Mbps',\n  '60 Mbps',\n  '70 Mbps',\n  '80 Mbps',\n  '90 Mbps',\n  '100 Mbps',\n  '150 Mbps',\n  '200 Mbps',\n  '250 Mbps',\n  '300 Mbps',\n  '400 Mbps',\n  '500 Mbps',\n  '600 Mbps',\n  '700 Mbps',\n  '750 Mbps',\n  '800 Mbps',\n  '900 Mbps',\n  '1 Gbps',\n  '1.5 Gbps',\n  '2 Gbps',\n  '2.5 Gbps',\n  '3 Gbps',\n  '4 Gbps',\n  '5 Gbps',\n  '7.5 Gbps',\n  '10 Gbps',\n];\n\nexport const l2vpnLocationHandoffInterface = [\n  'Electrical (RJ45)',\n  'Optical (LCPC)',\n  'Optical (SCPC)',\n  'Optical (FCPC)',\n  'Optical (E2000)',\n];\n\nexport const l2vpnProtectionType = [\n  'Unprotected (Silver SLA)',\n  'Protected - Single POP Dual Lastmile (Gold SLA)',\n  'Protected - Dual POP Delivered as two Seperate Circuits (Platinium SLA)',\n];\n\nexport const l2vpnLastMileTechnology = ['Microwave', 'Fibre', 'Any'];\n\nexport const l2vpnNNIOptions = ['1G', '10G'];\n","import {\n  locationCategory,\n  crossConnect,\n  allCountries,\n  bandwidths,\n  handoffInterfaceTypes,\n  primarySubseaCables,\n  backhaulProtectionOptions,\n  maxILADistance,\n  fibreRoute,\n  diaPreferredTechnology,\n  diaProtectionTypes,\n  diaTechnicalSpecBandwidths,\n  publicIpSubnet,\n  nplcBandwidths,\n  nplcHandoffInterfaceTypes,\n  nplcProtectionOptions,\n  leoSelectTargetSegment,\n  leoIntendedUseCase,\n  leoRequiredTrafficVolume,\n  pcaCloudServiceProviders,\n  pcaBandwidth,\n  pcaRegionOptions,\n  ipTransitBandwidth,\n  ipTransitServiceOptions,\n} from './non-standard-datasets';\n\nimport {\n  l2vpnBandwidths,\n  l2vpnLastMileTechnology,\n  l2vpnLocationHandoffInterface,\n  l2vpnNNIOptions,\n  l2vpnProtectionType,\n} from './standard-datasets';\n\nexport const forms: formTypes = {\n  '/converge/services/request-new-service/nplc': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationACrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location B\n        heading: 'Location B',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location B address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location B's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationBLatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationBLongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationBCategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationBCrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationBBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationBStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationBCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationBCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location B\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location B. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationBFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationBLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                //left side\n                label: \"Contact's Phone Number\",\n                name: 'locationBPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' }, //in the case where you want to put a component on the left side but nothing on the right side\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'NPLC Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Technical details',\n            titleHasBackground: true,\n            bodyText: 'Specify the technical details of your NPLC to ensure accurate provisioning.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: nplcBandwidths.map((bandwidth) => ({\n                  label: bandwidth,\n                  value: bandwidth,\n                })),\n              },\n              {\n                label: 'Handoff Interface Type',\n                name: 'handoffInterfaceType',\n                type: 'dropdown',\n                isOptional: false,\n                options: nplcHandoffInterfaceTypes.map((type) => ({\n                  label: type,\n                  value: type,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Protection',\n                name: 'protection',\n                type: 'dropdown',\n                isOptional: false,\n                options: nplcProtectionOptions.map((option) => ({\n                  label: option,\n                  value: option,\n                })),\n              },\n              {\n                label: 'MTU Required',\n                name: 'mtuRequired',\n                type: 'asn',\n                isOptional: true,\n                helperText: 'Ranges from 1500 to 9000',\n              },\n            ],\n          },\n          {\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                type: 'textarea',\n                isOptional: true,\n                name: 'comments',\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n\n  '/converge/services/request-new-service/l3vpn': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationACrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location B\n        heading: 'Location Z-1',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location Z-1 address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location Z-1's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationZ1Latitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationZ1Longitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationZ1Category',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationZ1CrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationZ1BuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationZ1StreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationZ1City',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationZ1Country',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location B\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location Z-1. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationZ1FirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationZ1LastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                //left side\n                label: \"Contact's Phone Number\",\n                name: 'locationZ1PhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' }, //in the case where you want to put a component on the left side but nothing on the right side\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n  '/converge/services/request-new-service/iplc': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationACrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Location B',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location B address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location B's details\",\n            isAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationBLatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationBLongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationBCategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationBCrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationBBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationBStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationBCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationBCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location B. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationBFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationBLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationBPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'IPLC technical details',\n            titleHasBackground: true,\n            bodyText: 'Specify the technical details of your IPLC to ensure accurate provisioning.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: bandwidths.map((bandwith) => ({\n                  label: bandwith,\n                })),\n              },\n              {\n                label: 'Handoff Interface Type',\n                name: 'handoffInterfaceType',\n                type: 'dropdown',\n                isOptional: false,\n                options: handoffInterfaceTypes.map((interfaceType) => ({\n                  label: interfaceType,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Primary Subsea Cable',\n                name: 'primarySubSeaCable',\n                type: 'dropdown',\n                isOptional: false,\n                options: primarySubseaCables.map((cable) => ({\n                  label: cable,\n                })),\n              },\n              {\n                label: 'Specify Other Subsea Cable',\n                name: 'primaryOtherSubSeaCable',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Subsea Protection',\n                name: 'subseaProtection',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Unprotected', value: 'unprotected' },\n                  { label: 'Protected using another Subsea as separate link', value: 'protected' },\n                ],\n              },\n            ],\n          },\n          {\n            title: 'Secondary Subsea Cable',\n            hideTitle: true,\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Secondary Subsea Cable',\n                name: 'secondarySubSeaCable',\n                type: 'dropdown',\n                isOptional: true,\n                options: primarySubseaCables.map((cable) => ({\n                  label: cable,\n                })),\n              },\n              {\n                label: 'Specify Other Subsea Cable',\n                name: 'secondaryOtherSubSeaCable',\n                type: 'text',\n                isOptional: true,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'MTU Required',\n                name: 'mtuRequired',\n                type: 'asn',\n                helperText: 'Ranges from 1500 to 9000',\n                isOptional: true,\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            title: 'Location A backhaul protection',\n            fields: [\n              {\n                label: 'Primary Subsea Backhaul Protection',\n                name: 'locationAPrimarySubseaBackhaulProtection',\n                type: 'dropdown',\n                isOptional: true,\n                options: backhaulProtectionOptions.map((option) => ({\n                  label: option,\n                })),\n              },\n              {\n                label: 'Secondary Subsea Backhaul Protection',\n                name: 'locationASecondarySubseaBackhaulProtection',\n                type: 'dropdown',\n                isOptional: true,\n                options: backhaulProtectionOptions.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            title: 'Location B backhaul protection',\n            fields: [\n              {\n                label: 'Primary Subsea Backhaul Protection',\n                name: 'locationBPrimarySubseaBackhaulProtection',\n                type: 'dropdown',\n                isOptional: true,\n                options: backhaulProtectionOptions.map((option) => ({\n                  label: option,\n                })),\n              },\n              {\n                label: 'Secondary Subsea Backhaul Protection',\n                name: 'locationBSecondarySubseaBackhaulProtection',\n                type: 'dropdown',\n                isOptional: true,\n                options: backhaulProtectionOptions.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                type: 'textarea',\n                name: 'comments',\n                isOptional: true,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n  '/converge/services/request-new-service/dark-fibre': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                  value: category,\n                })),\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location B\n        heading: 'Location B',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location B address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location B's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationBLatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationBLongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationBcategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationBBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationBStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationBCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationBCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location B\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location B. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationBFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationBLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                //left side\n                label: \"Contact's Phone Number\",\n                name: 'locationBPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' }, //in the case where you want to put a component on the left side but nothing on the right side\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Dark Fibre Technical details',\n            titleHasBackground: true,\n            bodyText:\n              'Specify the technical details of your Dark Fibre to ensure accurate provisioning.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Number Of Fibre Pairs',\n                name: 'fibrePairNumber',\n                type: 'numericInteraction',\n                isOptional: false,\n                helperText: 'One Fibre Pair is two strands of Fibre',\n              },\n              {\n                label: 'Fibre Route',\n                name: 'fibreRoute',\n                type: 'dropdown',\n                options: fibreRoute.map((route) => ({\n                  label: route,\n                })),\n                helperText: 'Linear is 1 Fibre Pair Unprotected, Ring is 1 Fibre Pair Protected',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'ILA required?',\n                name: 'ilaRequired',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: true },\n                  { label: 'No', value: false },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Maximum ILA distance accepted per site',\n                name: 'maxDistance',\n                type: 'dropdown',\n                isOptional: false,\n                options: maxILADistance.map((distance) => ({\n                  label: distance,\n                })),\n              },\n              {\n                label: 'ILA Hosting Space Requirement',\n                name: 'hostingSpace',\n                type: 'text',\n                helperText: '1/4 Rack, 1/2 Rack, Full Rack, Multiple Racks',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'ILA power type',\n                name: 'ilaPowerType',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'AC', value: 'AC' },\n                  { label: 'DC', value: 'DC' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'ILA Current Requirements (Amps)',\n                name: 'currentAmp',\n                type: 'numericInteraction',\n                isOptional: false,\n              },\n              {\n                label: 'ILA Power Requirement (KVA)',\n                name: 'powerRequirement',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                type: 'textarea',\n                isOptional: true,\n                name: 'comments',\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n  '/converge/services/request-new-service/l2vpn': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationACrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Location B',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location B address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location B's details\",\n            isAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationBLatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationBLongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationBCategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationBCrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationBBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationBStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationBCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationBCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location B. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationBFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationBLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationBPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'L2 VPN Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Technical details',\n            titleHasBackground: true,\n            bodyText:\n              'Specify the technical details of your L2 VPN to ensure accurate provisioning.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: l2vpnBandwidths.map((bandwidth) => ({\n                  label: bandwidth,\n                  value: bandwidth,\n                })),\n              },\n              {\n                label: 'Location A Handoff Interface',\n                name: 'locationAHandoffInterface',\n                type: 'dropdown',\n                isOptional: false,\n                options: l2vpnLocationHandoffInterface.map((iface) => ({\n                  label: iface,\n                  value: iface,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Location A Fibre Type',\n                name: 'locationAFibreType',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Single Mode Fibre (SMF)', value: 'singleMode' },\n                  { label: 'Multi Mode Fibre (MMF)', value: 'multiMode' },\n                ],\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Location B Handoff Interface',\n                name: 'locationBHandoffInterface',\n                type: 'dropdown',\n\n                isOptional: false,\n                options: l2vpnLocationHandoffInterface.map((iface) => ({\n                  label: iface,\n                  value: iface,\n                })),\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Location B Fibre Type',\n                name: 'locationBFibreType',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Single Mode Fibre (SMF)', value: 'Single Mode Fibre (SMF)' },\n                  { label: 'Multi Mode Fibre (MMF)', value: 'Multi Mode Fibre (MMF)' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Protection Type',\n                type: 'dropdown',\n                isOptional: false,\n                name: 'protectionType',\n                options: l2vpnProtectionType.map((type) => ({\n                  label: type,\n                  value: type,\n                })),\n              },\n              {\n                label: 'Preferred Lastmile Technology',\n                type: 'dropdown',\n                isOptional: false,\n                name: 'preferredLastmileTechnology',\n                options: l2vpnLastMileTechnology.map((tech) => ({\n                  label: tech,\n                  value: tech,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'MTU Required',\n                name: 'mtuRequired',\n                type: 'asn',\n                isOptional: true,\n                helperText: 'Ranges from 1500 to 9000',\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            title: 'NNI',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'NNI Type',\n                name: 'nniType',\n                type: 'dropdown',\n                isOptional: false,\n                options: [\n                  { label: 'New', value: 'New' },\n                  { label: 'Existing', value: 'Existing' },\n                ],\n              },\n              {\n                label: 'NNI Location Details',\n                name: 'nniIpAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'NNI Interface',\n                name: 'nniInterface',\n                type: 'dropdown',\n                isOptional: false,\n                helperText: 'For new NNI',\n                options: l2vpnNNIOptions.map((option) => ({\n                  label: option,\n                  value: option,\n                })),\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                name: 'comments',\n                type: 'textarea',\n                isOptional: true,\n                characterCount: 500,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n  '/converge/services/request-new-service/dia': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Location A',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Location A address Details',\n            titleHasBackground: true,\n            bodyText: \"Enter Location A's details\",\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              { label: 'Latitude', name: 'locationALatitude', type: 'text', isOptional: false },\n              { label: 'Longitude', name: 'locationALongitude', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Category',\n                name: 'locationACategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: locationCategory.map((category) => ({\n                  label: category,\n                })),\n              },\n              {\n                label: 'Cross Connect',\n                name: 'locationACrossConnect',\n                type: 'dropdown',\n                isOptional: false,\n                options: crossConnect.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'locationABuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'locationAStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'locationACity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'locationACountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'locationAFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'locationALastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'locationAPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      {\n        heading: 'DIA Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Technical details',\n            titleHasBackground: true,\n            bodyText: 'Specify the technical details of your DIA to ensure accurate provisioning.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'diaBandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: diaTechnicalSpecBandwidths.map((bandwidth) => ({\n                  label: bandwidth,\n                  value: bandwidth,\n                })),\n              },\n              {\n                label: 'Protection Type',\n                name: 'diaProtectionType',\n                type: 'dropdown',\n                isOptional: false,\n                options: diaProtectionTypes.map((type) => ({\n                  label: type,\n                  value: type,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Preferred Technology',\n                name: 'diaPreferredTechnology',\n                type: 'dropdown',\n                isOptional: false,\n                options: diaPreferredTechnology.map((tech) => ({\n                  label: tech,\n                  value: tech,\n                })),\n              },\n              {\n                label: 'Public IP Subnet',\n                name: 'diaPublicIpSubnet',\n                type: 'dropdown',\n                helperText: 'Subject to feasibility',\n                isOptional: false,\n                options: publicIpSubnet.map((subnet) => ({\n                  label: subnet,\n                  value: subnet,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'MTU Required',\n                name: 'mtuRequired',\n                type: 'asn',\n                isOptional: true,\n                helperText: 'Ranges from 1500 to 9000',\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Routing Configuration',\n                name: 'diaRoutingConfiguration',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'BGP', value: 'BGP' },\n                  { label: 'Static Routing', value: 'Static Routing' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            title: 'BGP Routing Details',\n            hideTitle: true,\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'AS Number',\n                name: 'diaASNumber',\n                type: 'text',\n                helperText: 'Required for BGP Routing',\n                isOptional: false,\n              },\n              {\n                label: 'IP Address Space',\n                name: 'diaIpAddressSpace',\n                type: 'text',\n                helperText: 'Required for BGP Routing',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'CPE Required?',\n                type: 'radio',\n                isOptional: false,\n                name: 'diaCpeRequired',\n                helperText: 'Please select an option below:',\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            title: 'CPE Details',\n            hideTitle: true,\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'CPE Specification',\n                name: 'diaCpeSpecification',\n                type: 'textarea',\n                isOptional: false,\n                helperText: 'Subject to availability',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                type: 'divider',\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                name: 'comments',\n                type: 'textarea',\n                isOptional: true,\n                characterCount: 500,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n\n  '/converge/services/request-new-service/leo-satellite': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Remote Site Location',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Remote site address details',\n            titleHasBackground: true,\n            bodyText: 'The remote site location where the service will be installed.',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'Latitude',\n                name: 'remoteSiteLocationLatitude',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Longitude',\n                name: 'remoteSiteLocationLongitude',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          // {\n          //   isAdjacent: true,\n          //   fields: [\n          //     {\n          //       label: 'Category',\n          //       name: 'remoteSiteLocationCategory',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: locationCategory.map((category) => ({\n          //         label: category,\n          //       })),\n          //     },\n          //     {\n          //       label: 'Cross Connect',\n          //       name: 'remoteSiteLocationCrossConnect',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: crossConnect.map((option) => ({\n          //         label: option,\n          //       })),\n          //     },\n          //   ],\n          // },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'remoteSiteLocationBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'remoteSiteLocationStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'remoteSiteLocationCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'remoteSiteLocationCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location A. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'remoteSiteLocationFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'remoteSiteLocationLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's Phone Number\",\n                name: 'remoteSiteLocationPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location B\n        heading: 'Traffic Destination(Hub Location) ',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Traffic destination address details',\n            titleHasBackground: true,\n            bodyText: 'The destination of the traffic',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'Latitude',\n                name: 'trafficDestinationLatitude',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Longitude',\n                name: 'trafficDestinationLongitude',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          // {\n          //   isAdjacent: true,\n          //   fields: [\n          //     {\n          //       label: 'Category',\n          //       name: 'trafficDestinationCategory',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: locationCategory.map((category) => ({\n          //         label: category,\n          //       })),\n          //     },\n          //     {\n          //       label: 'Cross Connect',\n          //       name: 'trafficDestinationCrossConnect',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: crossConnect.map((option) => ({\n          //         label: option,\n          //       })),\n          //     },\n          //   ],\n          // },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Building Name',\n                name: 'trafficDestinationBuildingName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Street Address',\n                name: 'trafficDestinationStreetAddress',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'City',\n                name: 'trafficDestinationCity',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Country',\n                name: 'trafficDestinationCountry',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n            ],\n          },\n          //DIVIDER\n          {\n            fields: [{ type: 'divider' }],\n          },\n          //SECTION 2 - Contact Details Location B\n          {\n            title: 'Contact Details',\n            bodyText:\n              'Enter the contact person details for Location B. These are required to conduct a firm feasibility assessment and site survey',\n            isAdjacent: true,\n            fields: [\n              {\n                label: \"Contact's First Name\",\n                name: 'trafficDestinationFirstName',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: \"Contact's Last Name\",\n                name: 'trafficDestinationLastName',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                //left side\n                label: \"Contact's Phone Number\",\n                name: 'trafficDestinationPhoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n              { type: 'spaceHolder' }, //in the case where you want to put a component on the left side but nothing on the right side\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'LEO Satellite technical details',\n            titleHasBackground: true,\n            bodyText:\n              'Specify the technical details of your LEO Satellite service to ensure accurate provisioning.',\n            fields: [\n              {\n                label: 'Select the required service type',\n                name: 'serviceType',\n                type: 'selectCards',\n                isOptional: false,\n                options: [\n                  { label: 'L2 VPN', description: 'Layer 2' },\n                  { label: 'L3 VPN', description: 'Layer 3' },\n                  { label: 'DIA', description: 'Dedicated Internet Access' },\n                ],\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Select Target Segment',\n                name: 'targetSegment',\n                type: 'dropdown',\n                isOptional: false,\n                options: leoSelectTargetSegment.map((option) => ({\n                  label: option,\n                })),\n              },\n              {\n                label: 'Select Intended Use Case',\n                name: 'intendedUseCase',\n                type: 'dropdown',\n                isOptional: false,\n                options: leoIntendedUseCase.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Total number of sites required ',\n                name: 'numberSitesRequired',\n                type: 'numericInteraction',\n                isOptional: false,\n              },\n              {\n                label: 'Select required volume of traffic',\n                name: 'requiredVolumeTraffic',\n                type: 'dropdown',\n                isOptional: false,\n                options: leoRequiredTrafficVolume.map((option) => ({\n                  label: option,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Preferred asymmetrical bandwidth speed (Download/Upload)',\n                name: 'preferredAsymmetricalBandwidthSpeed',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  {\n                    label: 'Maximum Information Rate (MIR)',\n                    value: 'Maximum Information Rate (MIR)',\n                  },\n                  {\n                    label: 'Committed Information Rate (CIR)',\n                    value: 'Committed Information Rate (CIR)',\n                  },\n                  { label: 'Help me choose', value: 'Help me choose' },\n                ],\n              },\n              {\n                label: 'Will you use latency-sensitive apps (e.g., VoIP, cloud, video)?',\n                name: 'latencySensitiveApps',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Maximum acceptable RTD',\n                name: 'maxRTD',\n                type: 'numericInteraction',\n                isOptional: false,\n                helperText: 'In milliseconds(ms)',\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Does the VSAT location have a clear Line Of Sight (LOS)',\n                name: 'vsatLineOfSite',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n              {\n                label: 'Do you required guaranteed uptime?',\n                name: 'guaranteedUptime',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Anticipated length of service',\n                name: 'serviceLength',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: '12 months', value: '12 months' },\n                  { label: '24 months', value: '24 months' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Is a local license required for satellite usage? ',\n                name: 'localLicenseRequired',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n              {\n                title: 'Contract Details',\n                hideTitle: true,\n                label: 'Can you contract it directly?',\n                name: 'directContact',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Do you have power on site?',\n                name: 'powerOnSite',\n                type: 'radio',\n                helperText: 'Please select an option below:',\n                isOptional: false,\n                options: [\n                  { label: 'Yes', value: 'Yes' },\n                  { label: 'No', value: 'No' },\n                ],\n              },\n              {\n                type: 'spaceHolder',\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n\n  '/converge/services/request-new-service/public-cloud-access': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Public Cloud Access technical details',\n            titleHasBackground: true,\n            bodyText:\n              'Specify the technical details of your Public Cloud Access service to ensure accurate provisioning.',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'country',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n              {\n                label: 'Region',\n                name: 'publicCloudAccessRegion',\n                type: 'dropdown',\n                isOptional: false,\n                options: pcaRegionOptions.map((region) => ({\n                  label: region,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'publicCloudAccessBandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: pcaBandwidth.map((bandwidth) => ({\n                  label: bandwidth,\n                })),\n              },\n              {\n                label: 'Cloud Service Provider',\n                name: 'publicCloudAccessProvider',\n                type: 'dropdown',\n                isOptional: false,\n                options: pcaCloudServiceProviders.map((provider) => ({\n                  label: provider,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                name: 'publicCloudAccessComments',\n                type: 'textarea',\n                isOptional: true,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n\n  '/converge/services/request-new-service/ip-transit': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Technical Details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'IP Transit technical details',\n            titleHasBackground: true,\n            bodyText:\n              'Specify the technical details of your IP Transit service to ensure accurate provisioning.',\n            isAdjacent: true,\n            isMobileAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'country',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((country) => ({\n                  label: country,\n                  value: country,\n                })),\n              },\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: ipTransitBandwidth.map((bandwidth) => ({\n                  label: bandwidth,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'IP Transit Service Options',\n                name: 'serviceOption',\n                type: 'dropdown',\n                isOptional: false,\n                options: ipTransitServiceOptions.map((region) => ({\n                  label: region,\n                })),\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n          {\n            isAdjacent: false,\n            fields: [\n              {\n                label: 'Any Other Comments/Requirements',\n                name: 'comments',\n                type: 'textarea',\n                isOptional: true,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Submit Request',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  },\n};\n\ntype FormSection = {\n  title?: string;\n  titleHasBackground?: boolean;\n  hideTitle?: boolean;\n  isAdjacent?: boolean;\n  isMobileAdjacent?: boolean;\n  fields: any[];\n  bodyText?: string;\n};\n\ntype FormData = {\n  [key: string]: string;\n};\n\ntype Form = {\n  steps: {\n    heading: string;\n    buttonLabel: string;\n    formSections: FormSection[];\n    isReviewStep?: boolean;\n  }[];\n  handleSubmit?: (formData: FormData) => void;\n};\n\ntype FormKey =\n  | '/converge/services/request-new-service/dia'\n  | '/converge/services/request-new-service/l2vpn'\n  | '/converge/services/request-new-service/l3vpn'\n  | '/converge/services/request-new-service/iplc'\n  | '/converge/services/request-new-service/dark-fibre'\n  | '/converge/services/request-new-service/nplc'\n  | '/converge/services/request-new-service/leo-satellite'\n  | '/converge/services/request-new-service/public-cloud-access'\n  | '/converge/services/request-new-service/ip-transit';\n\nexport type formTypes = {\n  [key in FormKey]: Form;\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { CustomerProfile } from '../../../../models';\n\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport Loading from '../../../../Loading/Loading';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { forms } from './configs/technical-forms-configs';\nimport { NavigationServiceV1 } from '../../../../services/NavigationService';\nimport { DynamicServiceV1 } from '../../../../services/DynamicDataService';\nimport {\n  CORRELATION_ID,\n  REQUEST_DARK_FIBRE_SERVICE_PAGE,\n  REQUEST_DIA_SERVICE_PAGE,\n  REQUEST_IPLC_SERVICE_PAGE,\n  REQUEST_IP_TRANSIT_PAGE,\n  REQUEST_L2VPN_SERVICE_PAGE,\n  REQUEST_L3VPN_SERVICE_PAGE,\n  REQUEST_LEO_SATELLITE_SERVICE_PAGE,\n  REQUEST_NPLC_SERVICE_PAGE,\n  REQUEST_PCA_SERVICE_PAGE,\n} from '../../../../utils';\nimport { useLocation } from 'react-router-dom';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\n\ninterface TechnicalSPecificationsFormProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  fetchData?: any;\n  dynamicData?: DynamicServiceV1;\n  navigationService?: NavigationServiceV1;\n  apiClientService?: any;\n  logoutF?: () => Promise<void>;\n}\n\nconst TechnicalSpecificationsForm = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: TechnicalSPecificationsFormProps): ReactElement => {\n  const [currentUrl, setCurrentUrl] = useState<keyof typeof forms | undefined>(undefined);\n  const { user } = useAuth0();\n  const location = useLocation();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [formData, setFormData] = useState<{ [key: string]: string }>({});\n  const [formId, setFormId] = useState<string | null>(null);\n  const correlationId = CORRELATION_ID;\n  const searchParams = new URLSearchParams(location.search);\n\n  useEffect(() => {\n    const formDataParam = searchParams.get('formData');\n    const formIdParam = searchParams.get('formId');\n    let parsedFormData = {};\n    if (formDataParam) {\n      try {\n        parsedFormData = JSON.parse(decodeURIComponent(formDataParam));\n      } catch (err) {\n        parsedFormData = {};\n      }\n    }\n    if (formIdParam) {\n      setFormId(formIdParam);\n    }\n    setFormData(parsedFormData);\n  }, [location.search]);\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  useEffect(() => {\n    setCurrentUrl(location.pathname.toString() as keyof typeof forms);\n  }, []);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const serviceNameMap: Record<string, string> = {\n    [REQUEST_L2VPN_SERVICE_PAGE]: 'L2VPN',\n    [REQUEST_L3VPN_SERVICE_PAGE]: 'L3VPN',\n    [REQUEST_DIA_SERVICE_PAGE]: 'DIA',\n    [REQUEST_IPLC_SERVICE_PAGE]: 'IPLC',\n    [REQUEST_DARK_FIBRE_SERVICE_PAGE]: 'Dark Fibre',\n    [REQUEST_NPLC_SERVICE_PAGE]: 'NPLC',\n    [REQUEST_LEO_SATELLITE_SERVICE_PAGE]: 'LEO Satellite',\n    [REQUEST_PCA_SERVICE_PAGE]: 'Public Cloud Access',\n    [REQUEST_IP_TRANSIT_PAGE]: 'IP Transit',\n  };\n  const currentService = serviceNameMap[location.pathname] ?? '';\n\n  const HeaderData = useMemo(\n    () => ({\n      username: profile?.fullName ?? 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: `Request New ${currentService} Service`,\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      backIcon: true,\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.connectForm ? (\n        <Loading isLoading={true} />\n      ) : (\n        <>\n          <DashboardWrapper data-testid='dashboard-app-container'>\n            <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n              <HeaderWrapper>\n                {!loading && (\n                  <FeatureAppLoader\n                    featureAppId='fa-header-converge'\n                    src={urls.header}\n                    moduleType=''\n                    config={HeaderData}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({\n                      error,\n                      featureAppNode,\n                      // loading,\n                    }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Converge Header'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                )}\n              </HeaderWrapper>\n\n              <FeatureAppLoader\n                featureAppId='fa-request-product'\n                src={urls.connectForm}\n                moduleType=''\n                config={{\n                  data: currentUrl ? forms[currentUrl] : undefined,\n                  userInfo: profile,\n                  type: 'technical',\n                  currentUrl: currentUrl,\n                  initialFormData: formData,\n                  formId: formId,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Request Product'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </div>\n          </DashboardWrapper>\n        </>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default TechnicalSpecificationsForm;\n","import { CREATE_USER_PAGE } from '../../../utils/constants';\nimport { allCountries } from '../converge/TechnicalSpecificationsFormPage/configs/non-standard-datasets';\nimport { ServiceInfo } from '../../../models';\n\nconst salutation = ['Mr.', 'Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.', 'Rev.', 'Hon.'];\n\nconst productNameMap: Record<string, string> = {\n  'Dedicated Internet Access': 'DIA',\n  'National Private Leased Circuit': 'NPLC',\n  'International Private Lease Circuit': 'IPLC',\n  'IP Transit': 'IPT',\n  'Dark Fiber': 'Dark Fiber',\n  'Data Centre': 'Data Centre',\n  'L2 VPN': 'L2 VPN',\n  'L3 VPN': 'L3 VPN',\n  'Public Cloud': 'Public Cloud',\n};\n\nexport const filterFormSectionsByServiceInventory = (\n  formSections: any[],\n  serviceInventory: ServiceInfo[] | undefined\n): any[] => {\n  if (!serviceInventory || serviceInventory.length === 0)\n    return [\n      {\n        title: 'Product access and roles',\n        titleHasBackground: window.location.pathname === CREATE_USER_PAGE,\n        bodyText:\n          'Your company currently has no active products in this business line. Once products are activated, you’ll be able to assign access to them here.',\n        isAdjacent: true,\n        fields: [{ type: 'divider' }],\n      },\n    ];\n\n  const activeProducts = serviceInventory\n    .filter((service) => service.status === 'Active')\n    .map((service) => service.product?.toLowerCase());\n\n  const filtered: any[] = [];\n\n  for (let i = 0; i < formSections.length; i++) {\n    const section = formSections[i];\n\n    if (i === 0) {\n      filtered.push(section);\n      continue;\n    }\n\n    if (!section.title) {\n      filtered.push(section);\n      continue;\n    }\n\n    const mappedProduct = productNameMap[section.title];\n    const hasAccess = mappedProduct && activeProducts.includes(mappedProduct.toLowerCase());\n\n    if (hasAccess) {\n      filtered.push(section);\n    } else {\n      // Skip divider that comes immediately after a removed section\n      const next = formSections[i + 1];\n      if (next?.fields?.some((f: any) => f.type === 'divider')) {\n        i++;\n      }\n    }\n  }\n\n  // Remove last item if it's a divider\n  const last = filtered[filtered.length - 1];\n  if (last?.fields?.some((f: any) => f.type === 'divider')) {\n    filtered.pop();\n  }\n  return filtered;\n};\n\n// async function fetchCrmToken(): Promise<string> {\n//   const response = await getToken(CORRELATION_ID);\n//   const accessToken = response?.data?.accessToken;\n//   if (!accessToken) throw new Error('No CRM token returned');\n\n//   sessionStorage.setItem('cToken', accessToken);\n//   return accessToken;\n// }\n\n// async function fetchAccountContacts(crmToken: string): Promise<any[]> {\n//   const profile = sessionStorage.getItem('profile');\n//   const email = profile ? JSON.parse(profile)?.emailAddress : null;\n//   if (!email) throw new Error('Email not found in profile');\n\n//   const response = await getAccountContacts(email, CORRELATION_ID, crmToken);\n\n//   return response.data.map((item: any) => ({\n//     name: item?.name,\n//     email: item?.email,\n//     status: item?.isInactive,\n//   }));\n// }\n\nexport async function formContent(): Promise<any> {\n  //const token = await fetchCrmToken();\n  //const contacts = await fetchAccountContacts(token);\n\n  return {\n    steps: [\n      //STEP 1\n      {\n        heading: 'Personal information',\n        buttonLabel: 'Next step',\n        formSections: [\n          {\n            title: 'Personal information',\n            titleHasBackground: true,\n            bodyText: 'Begin by capturing the user’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              { label: 'Email Address', name: 'emailAddress', type: 'email', isOptional: false },\n              {\n                label: 'Salutation',\n                name: 'Salutation',\n                type: 'dropdown',\n                isOptional: false,\n                options: ['none', 'Mr', 'Ms', 'Mrs', 'Dr', 'Prof'].map((category) => ({\n                  label: category,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              { label: 'First Name', name: 'firstName', type: 'text', isOptional: false },\n              { label: 'Middle Name', name: 'middleName', type: 'text', isOptional: true },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              { label: 'Last Name\t', name: 'lastName', type: 'text', isOptional: false },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Contact details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Address and phone numbers',\n            titleHasBackground: true,\n            bodyText: 'Provide this user’s mailing address and preferred phone numbers.',\n            isAdjacent: true,\n            fields: [\n              { label: 'Street Address', name: 'streetAddress', type: 'text', isOptional: false },\n              { label: 'City', name: 'City', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'Country',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((option) => ({ label: option })),\n              },\n              { label: 'Zip/Postal Code', name: 'postalCode', type: 'text', isOptional: false },\n            ],\n          },\n\n          //DIVIDER\n          { fields: [{ type: 'divider' }] },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Phone numbers',\n\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Phone number',\n                name: 'phoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n\n              {\n                label: 'Mobile phone number',\n                name: 'mobilePhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Home phone number',\n                name: 'homePhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n              {\n                label: 'Other phone number',\n                name: 'otherPhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'Work details and internal tags',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Work profile and internal classification',\n            titleHasBackground: true,\n            bodyText: 'Define where this user fits in your organisation.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Communication Platforms',\n                name: 'communicationPlatforms',\n                type: 'text',\n                value: 'Communication Platforms',\n                isOptional: false,\n                disabled: true,\n              },\n              {\n                label: 'Contact Category',\n                name: 'contactCategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: [\n                  'Sales',\n                  'Pre-sales',\n                  'Service Delivery',\n                  'Service Operations',\n                  'Finance',\n                  'Legal',\n                ].map((bandwith) => ({ label: bandwith })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Position',\n                name: 'Position',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Department',\n                name: 'Department',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          // {\n          //   isAdjacent: true,\n          //   fields: [\n          //     {\n          //       label: 'Reports To',\n          //       name: 'ReportsTo',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: contacts.map((user) => ({ label: user.email })),\n          //     },\n          //     { type: 'spaceHolder' },\n          //   ],\n          // },\n        ],\n      },\n      //STEP 4\n      {\n        heading: 'Access and roles',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Platform access and roles',\n            titleHasBackground: true,\n            bodyText:\n              'Assign this user to specific platforms within the Communication Platforms business line.',\n            isAdjacent: true,\n            fields: [{ type: 'divider' }],\n          },\n\n          {\n            isAdjacent: true,\n            title: 'WhatsApp Business Messaging',\n            fields: [\n              {\n                label: 'Access',\n                type: 'switch',\n                name: 'WhatsApp Business Messaging',\n              },\n            ],\n          },\n          // { isAdjacent: false, fields: [{ type: 'divider' }] },\n          // {\n          //   isAdjacent: true,\n          //   title: 'IPX Analytics',\n          //   fields: [\n          //     {\n          //       label: 'Access',\n          //       type: 'switch',\n          //       name: 'IPX Analytics',\n          //     },\n          //   ],\n          // },\n        ],\n      },\n\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Add New User',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  };\n}\n\n// const contactEmails: string[] = JSON.parse(sessionStorage.getItem('contactEmails') || '[]');\nexport async function fibreContent(serviceInventory?: ServiceInfo[]): Promise<any> {\n  //const token = await fetchCrmToken();\n  //const contacts = await fetchAccountContacts(token);\n\n  console.log('service inventory in formdata', serviceInventory);\n\n  return {\n    steps: [\n      //STEP 1\n      {\n        heading: 'Personal information',\n        buttonLabel: 'Next step',\n        formSections: [\n          {\n            title: 'Personal information',\n            titleHasBackground: true,\n            bodyText: 'Begin by capturing the user’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              { label: 'Email Address', name: 'emailAddress', type: 'email', isOptional: false },\n              {\n                label: 'Salutation',\n                name: 'Salutation',\n                type: 'dropdown',\n                isOptional: false,\n                options: ['none', 'Mr', 'Ms', 'Mrs', 'Dr', 'Prof'].map((category) => ({\n                  label: category,\n                })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              { label: 'First Name', name: 'firstName', type: 'text', isOptional: false },\n              { label: 'Middle Name', name: 'middleName', type: 'text', isOptional: true },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              { label: 'Last Name\t', name: 'lastName', type: 'text', isOptional: false },\n              { type: 'spaceHolder' },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Contact details',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Address and phone numbers',\n            titleHasBackground: true,\n            bodyText: 'Provide this user’s mailing address and preferred phone numbers.',\n            isAdjacent: true,\n            fields: [\n              { label: 'Street Address', name: 'streetAddress', type: 'text', isOptional: false },\n              { label: 'City', name: 'City', type: 'text', isOptional: false },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'Country',\n                type: 'dropdown',\n                isOptional: false,\n                options: allCountries.map((option) => ({ label: option })),\n              },\n              { label: 'Zip/Postal Code', name: 'postalCode', type: 'text', isOptional: false },\n            ],\n          },\n\n          //DIVIDER\n          { fields: [{ type: 'divider' }] },\n          //SECTION 2 - Contact Details Location A\n          {\n            title: 'Phone numbers',\n\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Phone number',\n                name: 'phoneNumber',\n                type: 'tel',\n                isOptional: false,\n              },\n\n              {\n                label: 'Mobile phone number',\n                name: 'mobilePhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Home phone number',\n                name: 'homePhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n              {\n                label: 'Other phone number',\n                name: 'otherPhoneNumber',\n                type: 'tel',\n                isOptional: true,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        heading: 'Work profile and internal classification',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: 'Define where this user fits in your organisation.',\n            titleHasBackground: true,\n            bodyText: 'Define where this user fits in your organisation.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Fibre Solutions',\n                name: 'fibreSolutions',\n                value: 'Fibre Solutions',\n                type: 'text',\n                isOptional: false,\n                disabled: true,\n              },\n              {\n                label: 'Contact Category',\n                name: 'contactCategory',\n                type: 'dropdown',\n                isOptional: false,\n                options: [\n                  'Sales',\n                  'Pre-sales',\n                  'Service Delivery',\n                  'Service Operations',\n                  'Finance',\n                  'Legal',\n                ].map((bandwith) => ({ label: bandwith })),\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Position',\n                name: 'Position',\n                type: 'text',\n                isOptional: false,\n              },\n              {\n                label: 'Department',\n                name: 'Department',\n                type: 'text',\n                isOptional: false,\n              },\n            ],\n          },\n          // {\n          //   isAdjacent: true,\n          //   fields: [\n          //     {\n          //       label: 'Reports To',\n          //       name: 'ReportsTo',\n          //       type: 'dropdown',\n          //       isOptional: false,\n          //       options: contacts.map((user) => ({ label: user.email })),\n          //     },\n          //     { type: 'spaceHolder' },\n          //   ],\n          // },\n        ],\n      },\n      //STEP 4\n      {\n        heading: 'Access and roles',\n        buttonLabel: 'Next Step',\n        formSections: filterFormSectionsByServiceInventory(\n          [\n            {\n              title: 'Product access and roles',\n              titleHasBackground: true,\n              bodyText:\n                'Assign this user to specific products within the Fibre Solutions business line.',\n              isAdjacent: true,\n              fields: [{ type: 'divider' }],\n            },\n\n            {\n              isAdjacent: true,\n              title: 'Dark Fiber',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Dark Fiber',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Data Centre',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Data Centre',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Dedicated Internet Access',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Dedicated Internet Access',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'IP Transit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'IP Transit',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'International Private Lease Circuit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'International Private Lease Circuit',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'L2 VPN',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'L2 VPN',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'L3 VPN',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'L3 VPN',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Public Cloud',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Public Cloud',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'National Private Lease Circuit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'National Private Lease Circuit',\n                },\n              ],\n            },\n          ],\n          serviceInventory\n        ),\n      },\n\n      //FINAL STEP\n      {\n        heading: 'Review & Submit',\n        buttonLabel: 'Add New User',\n        formSections: [],\n        isReviewStep: true,\n      },\n    ],\n  };\n}\n\nexport async function editFormContent(serviceInventory?: ServiceInfo[]): Promise<any> {\n  //const token = await fetchCrmToken();\n  //const contacts = await fetchAccountContacts(token);\n\n  return {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Personal Info',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'User details',\n            titleHasBackground: false,\n            bodyText: 'User’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Email Address',\n                name: 'email',\n                type: 'email',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Salutation',\n                name: 'salutation',\n                type: 'dropdown',\n                options: salutation.map((option) => ({ label: option })),\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'First Name',\n                name: 'name',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Middle Name',\n                name: 'middleName',\n                type: 'text',\n                options: [],\n                isOptional: true,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Last Name',\n                name: 'lastName',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                // label: 'Last Name',\n                // name: 'lastName',\n                // type: 'text',\n                // options: [ ],\n                // isOptional: false,\n                // dropdownSearch: false,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Contact Details',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'Mailing address',\n            titleHasBackground: false,\n            bodyText: 'User’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Street Address',\n                name: 'address',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'City',\n                name: 'city',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'country',\n                type: 'dropdown',\n                options: [],\n                isOptional: false,\n                dropdownSearch: true,\n              },\n              {\n                label: 'Zip/Postal Code',\n                name: 'postalCode',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          { fields: [{ type: 'divider' }] },\n          {\n            title: 'Phone numbers',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Phone Number',\n                name: 'phone',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Mobile Phone Number',\n                name: 'mobile',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Home Phone Number',\n                name: 'home',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Other Phone Number',\n                name: 'otherNumber',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        //SECTION 1 - Location A\n        heading: 'Work Info & Tags',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'Work details',\n            titleHasBackground: false,\n            bodyText: 'Where this user fits in your organisation.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: '',\n                name: 'businessLine',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n                disabled: true,\n              },\n              {\n                label: 'Contact Category',\n                name: 'category',\n                type: 'dropdown',\n                isOptional: false,\n                options: [\n                  'Sales',\n                  'Pre-sales',\n                  'Service Delivery',\n                  'Service Operations',\n                  'Finance',\n                  'Legal',\n                ].map((bandwith) => ({ label: bandwith })),\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Position',\n                name: 'position',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Department',\n                name: 'department',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            // title: 'Select contract term',\n            // fields: [\n            //   {\n            //     label: 'Reports To',\n            //     name: 'reportsTo',\n            //     type: 'dropdown',\n            //     isOptional: false,\n            //     options: contacts.map((user) => ({ label: user.email })),\n            //   },\n            //   { type: 'spaceHolder' },\n            // ],\n          },\n        ],\n      },\n      //STEP 4\n      {\n        heading: 'Access and roles',\n        buttonLabel: 'Next Step',\n        formSections: filterFormSectionsByServiceInventory(\n          [\n            {\n              title: '',\n              titleHasBackground: false,\n              bodyText: \"User's access to products within the Fibre Solutions business line.\",\n              isAdjacent: true,\n              fields: [{ type: 'divider' }],\n            },\n\n            {\n              isAdjacent: true,\n              title: 'Dark Fiber',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Dark Fiber',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Data Centre',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Data Centre',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Dedicated Internet Access',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Dedicated Internet Access',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'IP Transit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'IP Transit',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'International Private Lease Circuit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'International Private Lease Circuit',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'L2 VPN',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'L2 VPN',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'L3 VPN',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'L3 VPN',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'Public Cloud',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'Public Cloud',\n                },\n              ],\n            },\n            { isAdjacent: false, fields: [{ type: 'divider' }] },\n            {\n              isAdjacent: true,\n              title: 'National Private Leased Circuit',\n              fields: [\n                {\n                  label: 'Access',\n                  type: 'switch',\n                  name: 'National Private Leased Circuit',\n                },\n              ],\n            },\n          ],\n          serviceInventory\n        ),\n      },\n    ],\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      console.log('🚀 Final submission:', formData);\n      alert('form data submitted: ' + JSON.stringify(formData, null, 2));\n    },\n  };\n}\n\nexport async function editWholesaleContent(): Promise<any> {\n  //const token = await fetchCrmToken();\n  //const contacts = await fetchAccountContacts(token);\n\n  return {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Personal Info',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'User details',\n            titleHasBackground: false,\n            bodyText: 'User’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Email Address',\n                name: 'email',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Salutation',\n                name: 'salutation',\n                type: 'dropdown',\n                options: salutation.map((option) => ({ label: option })),\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'First Name',\n                name: 'name',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Middle Name',\n                name: 'middleName',\n                type: 'text',\n                options: [],\n                isOptional: true,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Last Name',\n                name: 'lastName',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                // label: 'Last Name',\n                // name: 'lastName',\n                // type: 'text',\n                // options: [ ],\n                // isOptional: false,\n                // dropdownSearch: false,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 2\n      {\n        //SECTION 1 - Location A\n        heading: 'Contact Details',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'Mailing address',\n            titleHasBackground: false,\n            bodyText: 'User’s core identity details.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Street Address',\n                name: 'address',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'City',\n                name: 'city',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Country',\n                name: 'country',\n                type: 'dropdown',\n                options: [],\n                isOptional: false,\n                dropdownSearch: true,\n              },\n              {\n                label: 'Zip/Postal Code',\n                name: 'postalCode',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          { fields: [{ type: 'divider' }] },\n          {\n            title: 'Phone numbers',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Phone Number',\n                name: 'phone',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Mobile Phone Number',\n                name: 'mobile',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Home Phone Number',\n                name: 'home',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Other Phone Number',\n                name: 'otherNumber',\n                type: 'tel',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n        ],\n      },\n      //STEP 3\n      {\n        //SECTION 1 - Location A\n        heading: 'Work Info & Tags',\n        buttonLabel: '',\n        formSections: [\n          {\n            title: 'Work details',\n            titleHasBackground: false,\n            bodyText: 'Where this user fits in your organisation.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: '',\n                name: 'businessLine',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n                disabled: true,\n              },\n              {\n                label: 'Contact Category',\n                name: 'category',\n                type: 'dropdown',\n                isOptional: false,\n                options: [\n                  'Sales',\n                  'Pre-sales',\n                  'Service Delivery',\n                  'Service Operations',\n                  'Finance',\n                  'Legal',\n                ].map((bandwith) => ({ label: bandwith })),\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Position',\n                name: 'position',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n              {\n                label: 'Department',\n                name: 'department',\n                type: 'text',\n                options: [],\n                isOptional: false,\n                dropdownSearch: false,\n              },\n            ],\n          },\n          {\n            // title: 'Select contract term',\n            // fields: [\n            //   {\n            //     label: 'Reports To',\n            //     name: 'reportsTo',\n            //     type: 'dropdown',\n            //     isOptional: false,\n            //     options: contacts.map((user) => ({ label: user.email })),\n            //   },\n            //   { type: 'spaceHolder' },\n            // ],\n          },\n        ],\n      },\n      //STEP 4\n      {\n        heading: 'Access and roles',\n        buttonLabel: 'Next Step',\n        formSections: [\n          {\n            title: '',\n            titleHasBackground: false,\n            bodyText:\n              'User’s access to platforms within the Communication Platforms business line.',\n            isAdjacent: true,\n            // fields: [{ type: 'divider' }],\n          },\n\n          {\n            isAdjacent: true,\n            title: 'WhatsApp Business Messaging',\n            fields: [\n              {\n                label: 'Access',\n                type: 'switch',\n                name: 'WhatsApp Business Messaging',\n              },\n            ],\n          },\n          // { isAdjacent: false, fields: [{ type: 'divider' }] },\n          // {\n          //   isAdjacent: true,\n          //   title: 'IPX Analytics',\n          //   fields: [\n          //     {\n          //       label: 'Access',\n          //       type: 'switch',\n          //       name: 'IPX Analytics',\n          //     },\n          //   ],\n          // },\n        ],\n      },\n    ],\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      console.log('🚀 Final submission:', formData);\n      alert('form data submitted: ' + JSON.stringify(formData, null, 2));\n    },\n  };\n}\n","import apiClient from '../interceptors/auth-interceptor';\n\nexport interface ContactRequest {\n  Salutation?: string;\n  FirstName: string;\n  MiddleName?: string;\n  AccountId: string;\n  LastName: string;\n  Email: string;\n  MailingStreet?: string;\n  MailingCity?: string;\n  MailingCountry?: string;\n  OtherPostalCode?: string;\n  MobilePhone?: string;\n  HomePhone?: string;\n  Phone?: string;\n  OtherPhone?: string;\n  Contact_Category__c?: string;\n  Title?: string;\n  Department?: string;\n  ReportsToId?: string;\n  Contact_Business_Line__c?: string;\n  No_Longer_With_Company__c?: boolean;\n}\nexport interface SalesforceCompositePayload {\n  records: ContactRecord[];\n}\n\nexport interface ContactRecord {\n  attributes: {\n    type: 'Contact';\n    referenceId: string;\n  };\n\n  Salutation: string;\n  AccountId: string;\n  FirstName: string;\n  MiddleName?: string;\n  LastName: string;\n  Email: string;\n  MailingStreet?: string;\n  MailingCity?: string;\n  MailingCountry?: string;\n  OtherPostalCode?: string;\n  Phone?: string;\n  MobilePhone?: string;\n  HomePhone?: string;\n  OtherPhone?: string;\n  Department?: string;\n  Title?: string;\n  Contact_Business_Line__c: string; // can be comma-separated list\n  Contact_Category__c: string;\n  ReportsToId: string;\n  Portal_Access_Policies__r?: {\n    records: PortalAccessPolicyRecord[];\n  };\n}\n\nexport interface PortalAccessPolicyRecord {\n  attributes: {\n    type: 'Portal_Access_Policy__c';\n    referenceId: string;\n  };\n  Fixed_Business_Line_Product__c: string | null;\n  Product__c: string | null;\n  Portal_Role__c: string | null;\n}\n\nexport interface ContactResponse {\n  transactionId?: string;\n  serviceId?: string;\n  correlationId?: string;\n  code?: string;\n  timestamp?: string;\n  message?: {\n    hasErrors: boolean;\n    results: Array<{\n      referenceId: string;\n      id: string;\n    }>;\n  };\n  status?: number;\n}\n\nexport async function CreateContact(\n  correlationId: string,\n  type: string,\n  contact: ContactRequest | SalesforceCompositePayload\n): Promise<ContactResponse> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n\n  const response = await apiClient.post(\n    url,\n    { body: contact }, // request payload\n    {\n      headers: {\n        'Content-Type': 'application/json',\n        correlationId,\n        type,\n      },\n    }\n  );\n\n  return response.data;\n}\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const LoadingWrapper = styled.div`\n  display: inline-flex;\n  padding: 10px;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(255, 255, 255, 0.8); /* transparent white overlay */\n  z-index: 20;\n\n  @media (max-width: 768px) {\n    position: relative;\n    width: auto;\n    height: auto;\n    background: transparent;\n  }\n`;\n\nexport const BodyText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour-tertiary']};\n      text-align: center;\n\n      ${typography['caption-regular']}/* device-size-m-l/caption/regular */\n    `;\n  }}\n`;\n","import React from 'react';\nimport { BodyText, LoadingWrapper } from './Loader.styled';\nimport { CircularIndeterminate } from '@mtnkente/paragon-indicators';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\n\nconst LoaderApp = (): JSX.Element => {\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <LoadingWrapper data-testid='loading-wrapper'>\n        <CircularIndeterminate size='large' />\n\n        <BodyText>Creating user.....</BodyText>\n      </LoadingWrapper>\n    </ThemeProvider>\n  );\n};\n\nexport default LoaderApp;\n","import apiClient from '../interceptors/auth-interceptor';\nimport { CORRELATION_ID } from '../utils';\n\nexport const updateUserAccess = async (data: object, type: string): Promise<void> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n  await apiClient.post(url, data, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId: CORRELATION_ID,\n      type: type,\n    },\n  });\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\n/* eslint-disable @typescript-eslint/no-floating-promises */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  Logout,\n  UserGroup,\n  Notification,\n  UserSymbol,\n  Success,\n  Info,\n} from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\n\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nimport { CustomerProfile } from '../../../../models';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport { fibreContent, formContent } from '../formdata';\n\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { Avatar } from '@mtnkente/paragon-display';\nimport { CreateContact } from '../../../../apis/create-contact';\nimport { Modal } from '@mtnkente/paragon-overlays';\nimport { ComboButtons, StandardButton } from '@mtnkente/paragon-buttons';\nimport LoaderApp from './loader/Loader';\nimport { BodyText } from './loader/Loader.styled';\nimport { CircularIndeterminate } from '@mtnkente/paragon-indicators';\nimport { getAccountContacts } from '../../../../apis/get-list-of-contacts';\nimport { getToken } from '../../../../apis/get-token';\nimport { useNavigate } from 'react-router-dom';\nimport { getUserId } from '../../../../utils/get-user-id';\nimport { updateUserAccess } from '../../../../apis/update-user-access';\nimport { useProfile } from '../../../../utils/ProfileProvider';\n\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  isOpenModal: boolean;\n  logoutF?: () => Promise<void>;\n}\n\ntype Contact = {\n  name: string;\n  salutation: string;\n  email: string;\n  id: string;\n  reportsToId: string;\n  [key: string]: any;\n};\n\nexport const CreateUser = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n  // isOpenModal,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [loadingModal, setLoadingModal] = useState<boolean>(false);\n  const [loadingForm, setLoadingForm] = useState<boolean>(true);\n  const [modalOpen, setModalOpen] = useState<boolean>(false);\n  const [faildModal, setFaildModal] = useState<boolean>(false);\n  const [modalMessage, setModalMessage] = useState<string>('');\n  const [modalTitle, setModalTitle] = useState<string>('');\n  const [accountContacts, setAccountContacts] = useState([]);\n  const [crmToken, setCrmToken] = useState('');\n  const correlationId = CORRELATION_ID;\n  const { userServiceInventory } = useProfile();\n\n  const [formdata, setFormData] = useState<any>({});\n  const navigate = useNavigate();\n\n  const line = profile?.portalFixedAdministrator ? 'Fixed' : 'Wholesale';\n\n  useEffect(() => {\n    const secretKey = 'mtn-bayobab-secret';\n\n    const encryptedContacts = sessionStorage.getItem('accountContacts');\n\n    if (encryptedContacts) {\n      try {\n        const bytes = CryptoJS.AES.decrypt(encryptedContacts, secretKey);\n        const decryptedData = bytes.toString(CryptoJS.enc.Utf8);\n        setAccountContacts(JSON.parse(decryptedData));\n      } catch (err) {\n        console.error('Error decrypting account contacts:', err);\n      }\n    }\n    const fetchFormData = async (): Promise<void> => {\n      try {\n        const content = profile?.portalFixedAdministrator\n          ? await fibreContent(userServiceInventory)\n          : await formContent();\n\n        setFormData(content);\n      } catch (error) {\n        console.error('Error loading form content:', error);\n      } finally {\n        setLoadingForm(false);\n      }\n    };\n\n    // eslint-disable-next-line no-void\n    void (async (): Promise<void> => {\n      await fetchFormData();\n    })();\n  }, [correlationId, line, profile]);\n\n  useEffect(() => {\n    if (!crmToken) return;\n  }, [crmToken, profile]);\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    form: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const goToUserManagement = (): void => {\n    navigate('/user-management');\n  };\n\n  const goToAddNewUser = (): void => {\n    window.location.reload();\n    navigate('/user-management/create-user');\n  };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      alertStatus: checkUnreadNotifications(notifications),\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      overviewText: 'Create User',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      notifications: {\n        type: 'notifications-centre',\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header || !urls.form) {\n    return <Loading isLoading={true} />;\n  }\n\n  const fibreFormContent = {\n    ...formdata,\n\n    handleSubmit: async (formData: { [key: string]: any }): Promise<void> => {\n      setLoadingModal(true);\n      const services = [\n        'Dark Fiber',\n        'Data Centre',\n        'Dedicated Internet Access',\n        'IP Transit',\n        'International Private Lease Circuit',\n        'L2 VPN',\n        'L3 VPN',\n        'Public Cloud',\n        'National Private Leased Circuit',\n        'WhatsApp Business Messaging',\n        'IPX Analytics',\n      ];\n\n      function getFirstIdByEmail(contacts: Contact[], email: string): string {\n        return contacts.find((contact) => contact.email === email)?.id ?? '';\n      }\n\n      const foundServices = services.filter((service) => {\n        if (!(service in formData)) return false;\n        const value = formData[service];\n        return value === true || value === 'true';\n      });\n\n      try {\n        let response;\n        if (foundServices.length <= 0) {\n          response = await CreateContact(correlationId, 'contact', {\n            Salutation: formData.Salutation,\n            FirstName: formData.firstName,\n            MiddleName: formData.middleName,\n            AccountId: profile?.accountId ?? '',\n            LastName: formData.lastName,\n            Email: formData.emailAddress,\n            MailingStreet: formData.streetAddress,\n            MailingCity: formData.City,\n            MailingCountry: formData.Country,\n            OtherPostalCode: formData.postalCode,\n            Phone: formData.phoneNumber,\n            MobilePhone: formData.mobilePhoneNumber,\n            HomePhone: formData.homePhoneNumber,\n            OtherPhone: formData.otherPhoneNumber,\n            Department: formData.Department,\n            Title: formData.Position,\n            Contact_Business_Line__c: profile?.portalFixedAdministrator\n              ? 'Fixed'\n              : 'Wholesale Mobility',\n            Contact_Category__c: formData.contactCategory,\n            ReportsToId: getFirstIdByEmail(accountContacts, formData.ReportsTo),\n          });\n        } else {\n          const [firstService, ...remainingServices] = foundServices;\n          response = await CreateContact(correlationId, 'paps', {\n            records: [\n              {\n                attributes: { type: 'Contact', referenceId: 'ref1' },\n                Salutation: formData.Salutation,\n                FirstName: formData.firstName,\n                MiddleName: formData.middleName,\n                AccountId: profile?.accountId ?? '',\n                LastName: formData.lastName,\n                Email: formData.emailAddress,\n                MailingStreet: formData.streetAddress,\n                MailingCity: formData.City,\n                MailingCountry: formData.Country,\n                OtherPostalCode: formData.postalCode,\n                Phone: formData.phoneNumber,\n                MobilePhone: formData.mobilePhoneNumber,\n                HomePhone: formData.homePhoneNumber,\n                OtherPhone: formData.otherPhoneNumber,\n                Department: formData.Department,\n                Title: formData.Position,\n                Contact_Business_Line__c: profile?.portalFixedAdministrator\n                  ? 'Fixed'\n                  : 'Wholesale Mobility',\n                Contact_Category__c: formData.contactCategory,\n                ReportsToId: getFirstIdByEmail(accountContacts, formData.ReportsTo),\n                Portal_Access_Policies__r: {\n                  records: [\n                    {\n                      attributes: { type: 'Portal_Access_Policy__c', referenceId: 'ref2' },\n                      Fixed_Business_Line_Product__c: profile?.portalFixedAdministrator\n                        ? firstService\n                        : null,\n                      Product__c: !profile?.portalFixedAdministrator ? firstService : null,\n                      Portal_Role__c:\n                        firstService === 'IPX Analytics'\n                          ? 'totalvis_analytics_sp_admin;totalvis_analytics_sp_user;5g_nsa_sp_user;totalvis_analytics_sp_diameter;totalvis_analytics_sp_gsm;totalvis_analytics_sp_gtp'\n                          : null,\n                    },\n                  ],\n                },\n              },\n            ],\n          }).then((res) => {\n            if (res.status === 200) {\n              const userId = getUserId(res);\n              for (const service of remainingServices) {\n                const papsData = {\n                  body: {\n                    Contact__c: userId,\n                    Fixed_Business_Line_Product__c: profile?.portalFixedAdministrator\n                      ? service\n                      : null,\n                    Product__c: !profile?.portalFixedAdministrator ? service : null,\n                    Portal_Role__c:\n                      service === 'IPX Analytics'\n                        ? 'totalvis_analytics_sp_admin;totalvis_analytics_sp_user;5g_nsa_sp_user;totalvis_analytics_sp_diameter;totalvis_analytics_sp_gsm;totalvis_analytics_sp_gtp'\n                        : null,\n                  },\n                };\n                updateUserAccess(papsData, 'editpap');\n              }\n            }\n          });\n        }\n        setModalOpen(true);\n        setFaildModal(false);\n        setModalTitle('User added successfully');\n        setModalMessage(\n          `User has been successfully added and now has access to Bayobab Central’s ${\n            profile?.portalFixedAdministrator ? 'Fibre solutions' : 'Communication Platforms'\n          }  business line.`\n        );\n      } catch (error: any) {\n        console.error('failed:', error);\n\n        setModalTitle('Failed to add user');\n        setModalMessage(\n          error?.response?.data?.data?.message ??\n            `There was an error adding the user. The user could not be granted access to Bayobab Central. Please try again.`\n        );\n        setModalOpen(true);\n        setFaildModal(true);\n      } finally {\n        setLoadingModal(false);\n      }\n    },\n  };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-dashboard'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Dashboard Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          {!loadingForm ? (\n            <FeatureAppLoader\n              featureAppId='fa-bayobab-connect-form'\n              src={urls.form}\n              moduleType=''\n              config={{\n                data: fibreFormContent,\n                hasRecaptcha: false,\n                type: 'user',\n              }}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Connect Form'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          ) : (\n            <div\n              style={{\n                display: 'flex',\n                flexDirection: 'column',\n                alignItems: 'center',\n                justifyContent: 'center',\n                height: '100vh',\n              }}\n            >\n              <CircularIndeterminate size='large' />\n              <BodyText style={{ marginTop: '1rem' }}>Loading form, please wait...</BodyText>\n            </div>\n          )}\n          {loadingModal ? (\n            <LoaderApp />\n          ) : (\n            <Modal\n              $status={faildModal ? 'default' : 'success'}\n              $variant='feedback'\n              icon={<Info width={24} height={24} color='red' />}\n              size='small'\n              title={modalTitle}\n              description={modalMessage}\n              onOpenChange={(open) => setModalOpen(open)}\n              buttons={\n                <ComboButtons>\n                  {faildModal ? (\n                    <StandardButton\n                      $variant='primary'\n                      label='try again'\n                      onClick={() => setModalOpen(false)}\n                    />\n                  ) : (\n                    <>\n                      <StandardButton\n                        $variant='primary'\n                        label='Add another user'\n                        onClick={() => {\n                          setModalOpen(false);\n                          goToAddNewUser();\n                        }}\n                      />\n                      <StandardButton\n                        $variant='secondary'\n                        label='Go to user list'\n                        onClick={() => goToUserManagement()}\n                      />\n                    </>\n                  )}\n                </ComboButtons>\n              }\n              isOpen={modalOpen}\n              trigger={null}\n            />\n          )}\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import { ContactResponse } from '../apis/create-contact';\n\nexport const getUserId = (response: ContactResponse): string | undefined => {\n  const message =\n    typeof response.message === 'string' ? JSON.parse(response.message) : response.message;\n\n  return message?.results?.find((r: any) => r.referenceId === 'ref1')?.id;\n};\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const ProductListContainer = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['margin-xlarge']};\n      flex: 1 0 0;\n      padding: 32px;\n    `;\n  }};\n`;\n\nexport const TitleAndBodyText = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['margin-xsmall']};\n      align-self: stretch;\n    `;\n  }};\n`;\n\nexport const TitleWrap = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n`;\n\nexport const Title = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n    `;\n  }};\n`;\n\nexport const CaptionWrap = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 0.625rem;\n  flex: 1 0 0;\n`;\n\nexport const Caption = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['caption-regular']};\n    `;\n  }};\n`;\n\nexport const SummaryContainer = styled.div`\n  @media (max-width: 768px) {\n    display: none;\n  }\n`;\n\nexport const ContainerWrapper = styled.div`\n  display: grid;\n  grid-template-columns: 2fr 1fr;\n  gap: 1.5rem;\n\n  @media (max-width: 768px) {\n    grid-template-columns: 1fr;\n  }\n`;\n\nexport const ButtonContainer = styled.div`\n  width: 344px;\n`;\n\nexport const FeatureWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--padding-2xlarge, 40px);\n  align-self: stretch;\n`;\n","import React from 'react';\nimport { Add } from '@mtnkente/paragon-icons';\nimport L2VpnIcon from '../../QuickQuotes/icons/L2VpnIcon';\nimport DiaIcon from '../../QuickQuotes/icons/DiaIcon';\nimport L3VpnIcon from '../../QuickQuotes/icons/L3VpnIcon';\nimport IplcIcon from '../../QuickQuotes/icons/IplcIcon';\nimport DarkFibreIcon from '../../QuickQuotes/icons/DarkFibreIcon';\nimport NplcIcon from '../../QuickQuotes/icons/NplcIcon';\n\nexport const globalCarrierServices = [\n  {\n    title: 'L2 VPN',\n    description:\n      'Connect globally with Bayobab’s L2 VPN solution. Bridge your business and facilitate connections with our strong Global MPLS network.',\n    icon: <L2VpnIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, emailScreen: false, request: false },\n    route: 'converge/service-requests/l2vpn',\n    quickQuoteTag: true,\n  },\n  {\n    title: 'L3 VPN',\n    description:\n      'Our L3 VPN is a commitment to optimal connectivity, with its next-gen MPLS network for swift, secure, and uninterrupted data routing.',\n    icon: <L3VpnIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n    route: 'converge/services/request-new-service/l3vpn',\n  },\n  {\n    title: 'IPLC',\n    description:\n      'Secure, robust international connectivity over vast terrestrial/ subsea networks for safe, efficient data transmission.',\n    icon: <IplcIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n    route: 'converge/services/request-new-service/iplc',\n  },\n];\n\nexport const nationalCarrierServices = [\n  {\n    title: 'NPLC',\n    description:\n      'Our NPLC offers a dedicated, secure highway for swift, uninterrupted inter-office connectivity, ensuring business efficiency. ',\n    icon: <NplcIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n    route: 'converge/services/request-new-service/nplc',\n  },\n  {\n    title: 'Dark Fibre',\n    description:\n      'Lease and customise your own secure, scalable fibre network. Total control for your data needs – your network, your rules.',\n    icon: <DarkFibreIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n    route: 'converge/services/request-new-service/dark-fibre',\n  },\n];\n\nexport const localInternet = [\n  {\n    title: 'DIA',\n    description:\n      'Get consistent, high-speed internet with our Dedicated Internet Access (DIA), free from fluctuations and interruptions ',\n    icon: <DiaIcon />,\n    buttonLabel: 'Request Service',\n    buttonIcon: <Add />,\n    stateData: { state: 'empty', buttonVisibility: false, emailScreen: false, request: false },\n    route: 'converge/service-requests/dia',\n    quickQuoteTag: true,\n  },\n];\n\n// export const globalIPProducts = [\n//   {\n//     title: 'IP Transit',\n//     description:\n//       'Your gateway to the global web. Bayobab’s IPT Service provides an optimum pathway for your data to access the global internet.',\n//     icon: <IpTransitIcon />,\n//     buttonLabel: 'Request Service',\n//     buttonIcon: <Add />,\n//     stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n//     route: 'converge/services/request-new-service/ip-transit',\n//   },\n// ];\n\n// export const cloudProducts = [\n//   {\n//     title: 'Public Cloud Access',\n//     description:\n//       'Low-latency connections to cloud resources, Public Cloud Access offers a pathway to cloud solutions, providing fast access and scalability.',\n//     icon: <L3VpnIcon />,\n//     buttonLabel: 'Request Service',\n//     buttonIcon: <Add />,\n//     stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n//     route: 'converge/services/request-new-service/public-cloud-access',\n//   },\n// ];\n\n// export const satelliteProducts = [\n//   {\n//     title: 'LEO Satellite',\n//     description:\n//       'High-speed, low-latency connectivity from a growing LEO satellite constellation, delivering reliable internet beyond terrestrial networks.',\n//     icon: <Placeholder />,\n//     buttonLabel: 'Request Service',\n//     buttonIcon: <Add />,\n//     stateData: { state: 'empty', buttonVisibility: false, request: true, emailScreen: false },\n//     route: 'converge/services/request-new-service/leo-satellite',\n//   },\n// ];\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport {\n  Caption,\n  CaptionWrap,\n  ProductListContainer,\n  Title,\n  TitleAndBodyText,\n  TitleWrap,\n} from '../ServiceRequest/ServiceRequest.styles';\nimport { Divider } from '@mtnkente/paragon-layouts';\nimport {\n  globalCarrierServices,\n  localInternet,\n  nationalCarrierServices,\n  //satelliteProducts,\n} from './ServiceProducts.config';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const ServiceRequest = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    serviceList: process.env.REACT_APP_FA_DYNAMIC_CARD_HOLDER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Request new service',\n      title: 'Post Login',\n      backIcon: true,\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.serviceList ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-service-request'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Service Request Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <ProductListContainer>\n              {/* <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>Satellite Services</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      Bayobab Satellite Services delivers connectivity beyond terrestrial networks,\n                      providing scalable solutions and reliable, high-speed connectivity.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-satellite-service-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: satelliteProducts,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'National Service Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n\n                <Divider $variant={'on-surface-full'} />\n              </div> */}\n\n              <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>Global Carrier Services</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      Bayobab’s Global Carrier Services Portfolio offers a thoughtful solution for\n                      those in search of consistent and reliable connectivity.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-global-service-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: globalCarrierServices,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    loading: isFeatureAppLoading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Global Service Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {isFeatureAppLoading ? <Loading isLoading={true} /> : featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n                <Divider $variant={'on-surface-full'} />\n              </div>\n              <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>National Carrier Services</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      National carrier services provide robust and reliable domestic connectivity, a\n                      key component to compete in the digital race and boost economic growth.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-national-service-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: nationalCarrierServices,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'National Service Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n\n                <Divider $variant={'on-surface-full'} />\n              </div>\n\n              <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>Local Internet</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      Bayobab’s Local Internet Services Portfolio curates top-tier solutions\n                      designed to optimise, accelerate, and secure localised online experiences.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-local-internet-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: localInternet,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Local Internet Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n\n                <Divider $variant={'on-surface-full'} />\n              </div>\n\n              {/* <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>Global IP products</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      Reliable, secure IP solutions that keep your digital operations connected,\n                      protected, and performing at their best.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-global-ip-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: globalIPProducts,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Global IP Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n\n                <Divider $variant={'on-surface-full'} />\n              </div> */}\n\n              {/* <div>\n                <TitleAndBodyText>\n                  <TitleWrap>\n                    <Title>Cloud products</Title>\n                  </TitleWrap>\n                  <CaptionWrap>\n                    <Caption>\n                      Fast, secure access to leading public cloud platforms with low latency, high\n                      reliability, and easy scalability.\n                    </Caption>\n                  </CaptionWrap>\n                </TitleAndBodyText>\n                <FeatureAppLoader\n                  featureAppId='fa-cloud-product-cards'\n                  src={urls.serviceList}\n                  moduleType=''\n                  config={{\n                    state: 'converge',\n                    cards: cloudProducts,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Cloud Product Cards'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </div> */}\n            </ProductListContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport interface StatusProps {\n  status: boolean;\n}\n\ninterface FilterItemProps {\n  $expanded?: boolean;\n}\n\nexport const HeadingConatiner = styled.div`\n  display: flex;\n  padding: var(--padding-none, 0px);\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-2xsmall, 4px);\n  align-self: stretch;\n`;\n\nexport const HeadingWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n`;\n\nexport const FormContainer = styled.div`\n  padding: var(--padding-xlarge, 32px) var(--padding-xlarge, 32px) var(--padding-2xlarge, 40px)\n    var(--padding-xlarge, 32px);\n  border-radius: var(--corner-radius-small, 16px);\n  background: var(--colour-surface-full, #fff);\n`;\n\nexport const TableContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--padding-xlarge, 32px);\n  align-self: stretch;\n`;\n\nexport const UserInfoContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nexport const StatusTag = styled.div<StatusProps>`\n  ${({ theme: { colors, floats }, status }): DefaultTheme => {\n    return css`\n      display: inline-flex;\n      padding: ${floats['padding-2xsmall']} ${floats['padding-small']};\n      align-items: center;\n      gap: ${floats['padding-2xsmall']};\n\n      border-radius: ${floats['corner-radius-medium']};\n      border: 1px solid\n        ${!status ? colors['border-colour-success'] : colors['border-colour-opacity-high-inverse']};\n      background: ${!status\n        ? colors['colour-surface-subtle-success']\n        : colors['colour-opacity-lowest-inverse']};\n    `;\n  }}\n`;\n\nexport const StatusText = styled.p<StatusProps>`\n  ${({ theme: { colors, typography }, status }): DefaultTheme => {\n    return css`\n      color: ${status ? colors['colour-success'] : colors['colour-on-disabled']};\n      ${typography['caption-regular']};\n\n      margin: 0;\n      padding: 0;\n    `;\n  }}\n`;\n\nexport const TopBar = styled.div`\n  position: fixed;\n  height: 100px;\n  width: 440px;\n  top: 0;\n  z-index: -999;\n  border-top-left-radius: 1.5rem;\n  background: var(--colour-surface-full-inverse, #44536a);\n`;\n\nexport const StyledAvatar = styled.div`\n  display: flex;\n  width: 6.5rem;\n  height: 6.5rem;\n  margin-left: 2rem;\n  margin-top: 3rem;\n  justify-content: center;\n  align-items: center;\n  z-index: 999;\n  border-radius: 50%;\n  border: var(--border-weight-xlarge, 5px) solid var(--border-colour-secondary-inverse, #fff);\n`;\n\nexport const Frame = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n`;\n\nexport const FilterContent = styled.div`\n  display: flex;\n  padding: var(--padding-xsmall, 8px) var(--padding-xlarge, 32px) var(--padding-xlarge, 32px)\n    var(--padding-xlarge, 32px);\n  flex-direction: column;\n  gap: 16px;\n  align-items: flex-start;\n  flex: 1 0 0;\n  align-self: stretch;\n`;\n\nexport const FilterItem = styled.div<FilterItemProps>`\n  display: flex;\n  flex-direction: ${({ $expanded }): string => ($expanded ? 'column' : 'row')};\n  padding: var(--padding-medium, 16px) var(--padding-large, 24px);\n  justify-content: ${({ $expanded }): string => ($expanded ? 'flex-start' : 'space-between')};\n  align-items: ${({ $expanded }): string => ($expanded ? 'flex-start' : 'center')};\n  gap: ${({ $expanded }): string => ($expanded ? 'var(--padding-large, 24px)' : '0')};\n  align-self: stretch;\n  border-radius: var(--corner-radius-xsmall, 8px);\n  border: 1px solid var(--border-colour-opacity-low-inverse, rgba(34, 45, 60, 0.16));\n`;\n\nexport const LoginWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-none, 0px);\n`;\n","export function formatModified(rawDate?: string | null): string {\n  if (!rawDate || typeof rawDate !== 'string') {\n    return '—'; // gracefully handle missing/invalid dates\n  }\n\n  // Safely normalize timezone (e.g., \"2024-08-16T10:30:00+0200\" → \"+02:00\")\n  const normalizedDateStr = rawDate.replace(/(\\+)(\\d{2})(\\d{2})$/, '$1$2:$3');\n\n  const parsedDate = new Date(normalizedDateStr);\n  if (isNaN(parsedDate.getTime())) {\n    return '—'; // fallback for unparsable strings\n  }\n\n  return new Intl.DateTimeFormat('en-GB', {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit',\n  }).format(parsedDate);\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { IconButton, StandardButton } from '@mtnkente/paragon-buttons';\nimport { SideSheet } from '@mtnkente/paragon-layouts';\nimport React, { ReactElement, useState } from 'react';\nimport {\n  FilterContent,\n  FilterItem,\n  Frame,\n  LoginWrapper,\n  StatusTag,\n  StyledAvatar,\n  TopBar,\n} from './UserManagement.style';\nimport { ChevronDown, Close } from '@mtnkente/paragon-icons';\nimport { Avatar, Text } from '@mtnkente/paragon-display';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\nimport { Row } from '@mtnkente/paragon-foundation';\nimport { useNavigate } from 'react-router-dom';\nimport { formatModified } from './FormatModifiedDate';\n\nexport const UserDetails = ({\n  user,\n  openModal,\n  closeDetails,\n  openUserRoles,\n}: any): ReactElement => {\n  const [openRoles, setOpenRoles] = useState<boolean>(openUserRoles ?? false);\n  const [openContactDetails, setOpenContactDetails] = useState<boolean>(false);\n  const [openWorkDetails, setOpenWorkDetails] = useState<boolean>(false);\n  const navigate = useNavigate();\n  const [isAccessExpanded, setIsAccessExpanded] = useState<boolean>(false);\n  const [isContactExpanded, setIsContactExpanded] = useState<boolean>(false);\n  const [isWorkExpanded, setIsWorkExpanded] = useState<boolean>(false);\n\n  const workDetailsFields = [\n    { label: 'Business Line', value: user.workDetails.businessLine, inline: true },\n    { label: 'Contact Category', value: user.workDetails.contactCategory, inline: true },\n    { label: 'Position', value: user.workDetails.position, inline: true },\n    { label: 'Department', value: user.workDetails.department, inline: true },\n    // { label: 'Reports To', value: user.workDetails.reportsTo, inline: true },\n    // { label: 'Description', value: user.workDetails.description, inline: true },\n  ];\n\n  const contactDetailsFields = [\n    { label: 'Street address', value: user.contactDetails.streetAddress, inline: true },\n    { label: 'City', value: user.contactDetails.city, inline: true },\n    { label: 'Province/State', value: user.contactDetails.provinceOrState, inline: true },\n    { label: 'Country', value: user.contactDetails.country, inline: true },\n    { label: 'Zip or Postal code', value: user.contactDetails.zipOrPostalCode, inline: true },\n    { label: 'Phone number', value: user.contactDetails.phoneNumber, inline: true },\n  ];\n\n  const getInitials = (fullName?: string): string => {\n    if (!fullName) return '';\n\n    return fullName\n      .trim()\n      .split(/\\s+/)\n      .map((word) => word[0]?.toUpperCase())\n      .join('');\n  };\n\n  const initials = getInitials(user?.name);\n\n  const handleCloseRoles = (): void => {\n    setOpenRoles(!openRoles);\n    setIsAccessExpanded(!isAccessExpanded);\n  };\n\n  const handleCloseContactDetails = (): void => {\n    setOpenContactDetails(!openContactDetails);\n    setIsContactExpanded(!isContactExpanded);\n  };\n\n  const handleCloseWorkDetails = (): void => {\n    setOpenWorkDetails(!openWorkDetails);\n    setIsWorkExpanded(!isWorkExpanded);\n  };\n\n  return (\n    <SideSheet\n      style={{ width: '440px', padding: '0' }}\n      $cornerRadius\n      $variant={'elevated'}\n      $position={'right'}\n      $isSheetOpen={true}\n      close={false}\n    >\n      <div style={{ marginTop: '1rem', marginLeft: '23rem' }}>\n        <IconButton\n          $variant='ghost'\n          $isInverted\n          $iconSize='medium'\n          $icon={<Close />}\n          onClick={(): void => {\n            closeDetails();\n          }}\n        />\n      </div>\n      <TopBar>\n        <StyledAvatar>\n          <Avatar\n            initials={initials}\n            style={{ marginTop: '2rem', marginLeft: '2rem' }}\n            size={'96x96'}\n          />\n        </StyledAvatar>\n        <div\n          style={{\n            display: 'flex',\n            height: '70vh',\n            overflow: 'auto',\n            flexDirection: 'column',\n            alignSelf: 'stretch',\n            justifyContent: 'space-between',\n            paddingTop: '8px',\n          }}\n        >\n          <FilterContent style={{ overflow: 'auto' }}>\n            <LoginWrapper>\n              <Text $fontStyle={'body-large-semibold'} color='colour-on-surface-full'>\n                {user.name}\n              </Text>\n              <Text color='colour-opacity-high-inverse' $fontStyle={'caption-regular'}>\n                {user.email}\n              </Text>\n            </LoginWrapper>\n            <StatusTag status={user.status !== 'Active'}>\n              <StatusIndicator $color={user.status === 'Active' ? 'positive' : 'disabled'} />\n              <Text\n                color={user.status === 'Active' ? 'colour-on-success' : 'colour-on-disabled'}\n                $fontStyle={'caption-regular'}\n              >\n                {user.status !== 'Active' ? 'Disabled' : 'Active'}\n              </Text>\n            </StatusTag>\n            <LoginWrapper>\n              <Text color='colour-opacity-high-inverse' $fontStyle={'caption-regular'}>\n                Created At\n              </Text>\n              <Text color='colour-on-surface-full' $fontStyle={'body-small-regular'}>\n                {formatModified(user.created)}\n              </Text>\n            </LoginWrapper>\n            <LoginWrapper>\n              <Text color='colour-opacity-high-inverse' $fontStyle={'caption-regular'}>\n                Last Modified\n              </Text>\n              <Text color='colour-on-surface-full' $fontStyle={'body-small-regular'}>\n                {formatModified(user.modified)}\n              </Text>\n            </LoginWrapper>\n            <FilterItem $expanded={isAccessExpanded || openRoles}>\n              <Frame>\n                <Text $fontStyle={'body-small-semibold'}>Access and Roles</Text>\n                <ChevronDown\n                  style={{\n                    transform: isAccessExpanded ? 'rotate(180deg)' : 'rotate(0)',\n                    transition: 'transform 0.3s',\n                  }}\n                  onClick={handleCloseRoles}\n                />\n              </Frame>\n\n              {openRoles && (\n                <div style={{ marginTop: '0.5rem' }}>\n                  <Row style={{ flexWrap: 'wrap', gap: '4px' }}>\n                    {Array.isArray(user.portal) &&\n                    user.portal.filter((p: string) => p !== 'IPX Analytics').length > 0 ? (\n                      user.portal\n                        .filter((portal: string) => portal !== 'IPX Analytics')\n                        .map((portal: string, index: number) => (\n                          <StatusTag key={index} status>\n                            <Text as='span' $fontStyle='caption-regular'>\n                              {portal}\n                            </Text>\n                          </StatusTag>\n                        ))\n                    ) : (\n                      <Text as='span' $fontStyle='caption-regular' color='gray'>\n                        No portals assigned\n                      </Text>\n                    )}\n                  </Row>\n                </div>\n              )}\n            </FilterItem>\n            <FilterItem $expanded={isContactExpanded}>\n              <Frame>\n                <Text $fontStyle={'body-small-semibold'}>Contact details</Text>\n                <ChevronDown\n                  style={{\n                    transform: isContactExpanded ? 'rotate(180deg)' : 'rotate(0)',\n                    transition: 'transform 0.3s',\n                  }}\n                  onClick={handleCloseContactDetails}\n                />\n              </Frame>\n              {openContactDetails && (\n                <div>\n                  {contactDetailsFields.map(({ label, value }) => (\n                    <div\n                      key={label}\n                      style={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        marginBottom: '0.75rem',\n                      }}\n                    >\n                      <Text $fontStyle='caption-regular'>{label}</Text>\n                      <Text $fontStyle='caption-semibold'>{value}</Text>\n                    </div>\n                  ))}\n                </div>\n              )}\n            </FilterItem>\n            <FilterItem $expanded={isWorkExpanded}>\n              <Frame>\n                <Text $fontStyle={'body-small-semibold'}>Work details</Text>\n                <ChevronDown\n                  style={{\n                    transform: isWorkExpanded ? 'rotate(180deg)' : 'rotate(0)',\n                    transition: 'transform 0.3s',\n                  }}\n                  onClick={handleCloseWorkDetails}\n                />\n              </Frame>\n              {openWorkDetails && (\n                <div>\n                  {workDetailsFields.map(({ label, value }) => (\n                    <div\n                      key={label}\n                      style={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        marginBottom: '0.75rem',\n                      }}\n                    >\n                      <Text $fontStyle='caption-regular'>{label}</Text>\n                      <Text $fontStyle='caption-semibold'>{value}</Text>\n                    </div>\n                  ))}\n                </div>\n              )}\n            </FilterItem>\n          </FilterContent>\n          <Frame\n            style={{\n              position: 'fixed',\n              bottom: '1rem',\n              width: '440px',\n              justifyContent: 'flex-end',\n              paddingRight: '38px',\n              background: 'transparent',\n              boxSizing: 'border-box',\n            }}\n          >\n            <div\n              style={{ display: 'flex', gap: '1rem', justifyContent: 'flex-end', width: '100%' }}\n            >\n              <StandardButton\n                $variant='secondary'\n                label={user?.status !== 'Active' ? 'Reactivate' : 'Disable'}\n                onClick={(): void => {\n                  closeDetails();\n                  openModal();\n                }}\n              />\n              <StandardButton\n                $variant='primary'\n                label={'Edit details'}\n                onClick={(): void => navigate('edit-user', { state: { user: user } })}\n              />\n            </div>\n          </Frame>\n        </div>\n      </TopBar>\n    </SideSheet>\n  );\n};\n","import React, { useState } from 'react';\nimport { TextLink } from '@mtnkente/paragon-buttons';\nimport { UserDetails } from './UserDetails'; // adjust import path\n\ninterface PortalColumnProps {\n  row: any;\n  isProduct: boolean;\n}\n\nexport const PortalColumn: React.FC<PortalColumnProps> = ({ row, isProduct }) => {\n  const [openDetails, setOpenDetails] = useState(false);\n  const [selectedUser, setSelectedUser] = useState<any | null>(null);\n\n  if (!row) return null; // safety for async data\n\n  const portals = Array.isArray(row.portal)\n    ? row.portal.filter((p: string) => p !== 'IPX Analytics')\n    : [];\n  const numberOfPortals = portals.length;\n  const labelText = `${numberOfPortals} ${isProduct ? 'products' : 'platforms'} assigned`;\n\n  const handleCloseDetails = (): void => setOpenDetails(false);\n  const handleOpenModal = (): void => setOpenDetails(true);\n\n  return (\n    <>\n      <TextLink\n        $size='small'\n        href='#'\n        label={labelText}\n        onClick={(e) => {\n          e.preventDefault();\n          setSelectedUser(row);\n          setOpenDetails(true);\n        }}\n      />\n\n      {openDetails && (\n        <UserDetails\n          user={selectedUser}\n          openModal={handleOpenModal}\n          closeDetails={handleCloseDetails}\n          openUserRoles\n        />\n      )}\n    </>\n  );\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React from 'react';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StatusTag, StatusText, UserInfoContainer } from './UserManagement.style';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\nimport { formatModified } from './FormatModifiedDate';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { Row } from '@mtnkente/paragon-foundation';\nimport { PortalColumn } from './PortalColumn';\n\nexport const useColumns = () => {\n  const { retrievedProfile } = useProfile();\n\n  return React.useMemo(\n    () => [\n      {\n        key: 'name',\n        label: 'Name & Email',\n        sortable: 'alphabetical',\n        render: (row: any): JSX.Element => (\n          <UserInfoContainer>\n            <Text as='span' $fontStyle='caption-semibold'>\n              {row.name}\n            </Text>\n            <Text as='span' $fontStyle='caption-regular'>\n              {row.email}\n            </Text>\n          </UserInfoContainer>\n        ),\n      },\n      {\n        key: 'status',\n        label: 'Status',\n        render: (row: any): JSX.Element => (\n          <StatusTag status={row.status !== 'Active'}>\n            <StatusIndicator $color={row.status === 'Active' ? 'positive' : 'disabled'} />\n            <StatusText status={row.status === 'Active'}>\n              {row.status !== 'Active' ? 'Disabled' : 'Active'}\n            </StatusText>\n          </StatusTag>\n        ),\n      },\n      {\n        key: 'portal',\n        label: retrievedProfile?.portalFixedAdministrator\n          ? 'Assigned Products'\n          : 'Assigned Platforms',\n        render: (row: any): JSX.Element => (\n          <PortalColumn row={row} isProduct={!!retrievedProfile?.portalFixedAdministrator} />\n        ),\n      },\n      {\n        key: 'created',\n        label: 'Created At',\n        sortable: 'numerical',\n        render: (row: any): JSX.Element => (\n          <Text as='span' $fontStyle='caption-regular'>\n            {formatModified(row.created)}\n          </Text>\n        ),\n      },\n    ],\n    [retrievedProfile]\n  );\n};\n\n// export const getColumns = () => {\n//   const { retrievedProfile } = useProfile();\n//   return useMemo(\n//     () => [\n//       {\n//         key: 'name',\n//         label: 'Name & Email',\n//         sortable: 'alphabetical',\n//         render: (row: any): JSX.Element => (\n//           <UserInfoContainer>\n//             <Text\n//               style={{\n//                 whiteSpace: 'normal',\n//                 wordBreak: 'break-word',\n\n//                 maxWidth: '180px',\n//               }}\n//               as='span'\n//               $fontStyle='caption-semibold'\n//             >\n//               {row.name}\n//             </Text>\n//             <Text\n//               style={{\n//                 whiteSpace: 'normal',\n//                 wordBreak: 'break-word',\n\n//                 maxWidth: '180px',\n//               }}\n//               as='span'\n//               $fontStyle='caption-regular'\n//             >\n//               {row.email}\n//             </Text>\n//           </UserInfoContainer>\n//         ),\n//       },\n//       {\n//         key: 'status',\n//         label: 'Status',\n//         render: (row: any): JSX.Element => (\n//           <StatusTag status={row.status !== 'Active'}>\n//             <StatusIndicator $color={row.status === 'Active' ? 'positive' : 'disabled'} />\n//             <StatusText status={row.status === 'Active' ? true : false}>\n//               {row.status !== 'Active' ? 'Disabled' : 'Active'}\n//             </StatusText>\n//           </StatusTag>\n//         ),\n//       },\n//       {\n//         key: 'portal',\n//         label: retrievedProfile?.portalFixedAdministrator\n//           ? 'Assigned Products'\n//           : 'Assigned Platforms',\n//         render: (row: any): JSX.Element => (\n//           <PortalColumn row={row} isProduct={retrievedProfile?.portalFixedAdministrator} />\n//         ),\n//       },\n//       {\n//         key: 'modified',\n//         label: 'Last Modified Date',\n//         sortable: 'numerical',\n//         render: (row: any): JSX.Element => (\n//           <Text as='span' $fontStyle='caption-regular'>\n//             {formatModified(row.modified)}\n//           </Text>\n//         ),\n//       },\n//     ],\n//     [retrievedProfile]\n//   );\n// };\n\nexport const columns = [\n  {\n    key: 'name',\n    label: 'Name & Email',\n    sortable: 'alphabetical',\n    render: (row: any): JSX.Element => (\n      <Row>\n        <Text\n          style={{\n            whiteSpace: 'normal',\n            wordBreak: 'break-word',\n            overflowWrap: 'anywhere',\n            maxWidth: '180px',\n          }}\n          as='span'\n          $fontStyle='caption-semibold'\n        >\n          {row.name}\n        </Text>\n        <Text\n          style={{\n            whiteSpace: 'normal',\n            wordBreak: 'break-word',\n            overflowWrap: 'anywhere',\n            maxWidth: '180px',\n          }}\n          as='span'\n          $fontStyle='caption-regular'\n        >\n          {row.email}\n        </Text>\n      </Row>\n    ),\n  },\n  {\n    key: 'status',\n    label: 'Status',\n    render: (row: any): JSX.Element => (\n      <StatusTag status={row.status !== 'Active'}>\n        <StatusIndicator $color={row.status === 'Active' ? 'positive' : 'disabled'} />\n        <Text\n          color={row.status === 'Active' ? 'colour-on-success' : 'colour-on-disabled'}\n          $fontStyle={'caption-regular'}\n        >\n          {row.status !== 'Active' ? 'Disabled' : 'Active'}\n        </Text>\n      </StatusTag>\n    ),\n  },\n  {\n    key: 'portal',\n    label: 'Assigned Products',\n    sortable: 'alphabetical',\n    render: (row: any): JSX.Element => {\n      const portals = Array.isArray(row.portal)\n        ? row.portal.filter((p: string) => p !== 'IPX Analytics')\n        : [];\n      const firstPortal = portals[0] ?? '';\n      const remainingCount = portals.length - 1;\n\n      return (\n        <Row style={{ gap: '0.25rem' }}>\n          {firstPortal && (\n            <StatusTag\n              style={{\n                display: 'inline-flex',\n                alignItems: 'center',\n                whiteSpace: 'normal',\n                wordBreak: 'break-word',\n                overflowWrap: 'anywhere',\n                maxWidth: '200px',\n                height: 'auto',\n              }}\n              status\n            >\n              <Text as='span' $fontStyle='caption-regular'>\n                {firstPortal}\n              </Text>\n            </StatusTag>\n          )}\n          {remainingCount > 0 && (\n            <StatusTag style={{ border: 'rgba(34, 45, 60, 0.16)' }} status>\n              <Text\n                style={{\n                  whiteSpace: 'normal',\n                  wordBreak: 'break-word',\n                  overflowWrap: 'anywhere',\n                  maxWidth: '180px',\n                }}\n                as='span'\n                $fontStyle='caption-regular'\n              >\n                +{remainingCount} more\n              </Text>\n            </StatusTag>\n          )}\n        </Row>\n      );\n    },\n  },\n  {\n    key: 'modified',\n    label: 'Last Modified Date',\n    sortable: 'numerical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {formatModified(row.modified)}\n      </Text>\n    ),\n  },\n];\n\nexport const userData = [\n  {\n    name: 'Jane Doe',\n    email: 'jane.doe@email.com',\n    status: 'Active',\n    portal: 'Converge',\n    modified: '1 month ago',\n    contactDetails: {\n      streetAddress: '123 Main St',\n      city: 'Cape Town',\n      provinceOrState: 'Western Cape',\n      country: 'South Africa',\n      zipOrPostalCode: '8001',\n      phoneNumber: '+27 00 000 0000',\n    },\n    workDetails: {\n      businessLine: 'Finance',\n      contactCategory: 'Internal',\n      position: 'Accountant',\n      department: 'Accounting',\n      reportsTo: 'John Smith',\n      description: 'Handles financial reporting and audits.',\n    },\n  },\n  {\n    name: 'Joe Moe',\n    email: 'joe.moe@email.com',\n    status: 'Active',\n    portal: 'Converge',\n    modified: '2 weeks ago',\n    contactDetails: {\n      streetAddress: '456 Long St',\n      city: 'Johannesburg',\n      provinceOrState: 'Gauteng',\n      country: 'South Africa',\n      zipOrPostalCode: '2000',\n      phoneNumber: '+27 00 000 0000',\n    },\n    workDetails: {\n      businessLine: 'HR',\n      contactCategory: 'External',\n      position: 'HR Specialist',\n      department: 'Human Resources',\n      reportsTo: 'Lisa Grey',\n      description: 'Manages recruitment and employee relations.',\n    },\n  },\n  {\n    name: 'Jane Mary',\n    email: 'mary.jane@email.com',\n    status: 'Disabled',\n    portal: ['IPX Analytics', 'Converge'],\n    modified: '3 days ago',\n    contactDetails: {\n      streetAddress: '789 Loop St',\n      city: 'Durban',\n      provinceOrState: 'KwaZulu-Natal',\n      country: 'South Africa',\n      zipOrPostalCode: '4001',\n      phoneNumber: '+27 00 000 0000',\n    },\n    workDetails: {\n      businessLine: 'IT',\n      contactCategory: 'Contractor',\n      position: 'Frontend Developer',\n      department: 'Development',\n      reportsTo: 'Michael Black',\n      description: 'Builds and maintains user interfaces.',\n    },\n  },\n  {\n    name: 'Zandi Zandi',\n    email: 'zandi.zandi@email.com',\n    status: 'Active',\n    portal: 'Converge',\n    modified: '5 days ago',\n    contactDetails: {\n      streetAddress: '101 Ocean View',\n      city: 'Port Elizabeth',\n      provinceOrState: 'Eastern Cape',\n      country: 'South Africa',\n      zipOrPostalCode: '6000',\n      phoneNumber: '+27 00 000 0000',\n    },\n    workDetails: {\n      businessLine: 'Marketing',\n      contactCategory: 'Internal',\n      position: 'Marketing Coordinator',\n      department: 'Marketing',\n      reportsTo: 'Susan Green',\n      description: 'Coordinates marketing campaigns and assets.',\n    },\n  },\n];\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const expandableData = (): { label: string; value: any }[] => [\n  // { label: 'SLA', value: row.additionalInfo.sla },\n  // { label: 'MRC', value: row.additionalInfo.mrc },\n  // { label: 'Start Date', value: row.additionalInfo.startDate },\n  // { label: 'End Date', value: row.additionalInfo.endDate },\n];\n\nexport const filterCategories = [\n  {\n    columnKey: 'status',\n    label: 'Status',\n    fields: ['status'],\n    options: [\n      { label: 'Active', value: 'Active' },\n      { label: 'Disabled', value: 'Disabled' },\n    ],\n  },\n  {\n    columnKey: 'portal',\n    label: 'Assigned platforms',\n    fields: ['portal'],\n    options: [\n      { label: 'Dark Fiber', value: 'Dark Fiber' },\n      { label: 'Data Centre', value: 'Data Centre' },\n      { label: 'Dedicated Internet Access', value: 'Dedicated Internet Access' },\n      { label: 'IP Transit', value: 'IP Transit' },\n      {\n        label: 'International Private Lease Circuit',\n        value: 'International Private Lease Circuit',\n      },\n      { label: 'L2 VPN', value: 'L2 VPN' },\n      { label: 'L3 VPN', value: 'L3 VPN' },\n      { label: 'Public Cloud', value: 'Public Cloud' },\n      { label: 'National Private Leased Circuit', value: 'National Private Leased Circuit' },\n    ],\n  },\n];\n\nexport const filterWholesaleCategories = [\n  {\n    columnKey: 'status',\n    label: 'Status',\n    fields: ['status'],\n    options: [\n      { label: 'Active', value: 'Active' },\n      { label: 'Disabled', value: 'Disabled' },\n    ],\n  },\n  {\n    columnKey: 'portal',\n    label: 'Assigned platforms',\n    fields: ['portal'],\n    options: [\n      { label: 'WhatsApp Business Messaging', value: 'WhatsApp Business Messaging' },\n      //{ label: 'IPX Analytics', value: 'IPX Analytics' },\n      // { label: 'IPX Policy', value: 'IPX Policy' },\n      // { label: 'P2P', value: 'P2P' },\n      // { label: 'A2P', value: 'A2P' },\n      // { label: 'P2A', value: 'P2A' },\n      // { label: 'Mobile Identity', value: 'Mobile Identity' },\n      // { label: 'IoT Connectivity', value: 'IoT Connectivity' },\n    ],\n  },\n];\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { ComboButtons, StandardButton } from '@mtnkente/paragon-buttons';\nimport { Modal } from '@mtnkente/paragon-overlays';\nimport React, { ReactElement } from 'react';\n\nexport const UserModal = ({ closeModal, handleSubmit, user }: any): ReactElement => {\n  const [isMobile, setIsMobile] = React.useState(false);\n\n  const handleWindowSizeChange = (): void => {\n    setIsMobile(window.innerWidth <= 640);\n  };\n\n  React.useEffect(() => {\n    handleWindowSizeChange();\n    window.addEventListener('resize', handleWindowSizeChange);\n    return (): void => {\n      window.removeEventListener('resize', handleWindowSizeChange);\n    };\n  }, []);\n\n  return (\n    <Modal\n      isOpen={true}\n      onOpenChange={(): void => closeModal()}\n      $variant={'standard'}\n      title={user?.status !== 'Active' ? 'Reactivate this user?' : 'Disable this user?'}\n      description={\n        user?.status !== 'Active'\n          ? 'Reactivating this user will temporarily grant them access. You can deactivate them later if needed.'\n          : 'Disabling this user will temporarily revoke their access. You can reactivate them later if needed.'\n      }\n      buttons={\n        <ComboButtons $isStacked={isMobile}>\n          <StandardButton\n            key='primary-btn'\n            $variant={'primary'}\n            label={user?.status !== 'Active' ? 'Reactivate user' : 'Disable user'}\n            onClick={(): void => {\n              handleSubmit();\n              closeModal();\n            }}\n          />\n          <StandardButton\n            key='primary-btn'\n            $variant={'secondary'}\n            label={'Cancel'}\n            onClick={(): void => {\n              closeModal();\n            }}\n          />\n        </ComboButtons>\n      }\n    ></Modal>\n  );\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Logout, PlusWithCircle, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport {\n  expandableData,\n  filterCategories,\n  filterWholesaleCategories,\n  useColumns,\n} from './UserManagement.config';\nimport * as CryptoJS from 'crypto-js';\nimport { HeadingConatiner, HeadingWrapper, TableContainer } from './UserManagement.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { useNavigate } from 'react-router-dom';\nimport { UserModal } from './UserManagementModal';\nimport {\n  ToastAction,\n  ToastDescription,\n  ToastNotification,\n  ToastProvider,\n} from '@mtnkente/paragon-overlays';\nimport { UserDetails } from './UserDetails';\nimport { CustomerProfile } from '../../../../models';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getAccountContacts } from '../../../../apis/get-list-of-contacts';\nimport { getToken } from '../../../../apis/get-token';\nimport { editUserStatus } from '../../../../apis/edit-user-status';\nimport { useProfile } from '../../../../utils/ProfileProvider';\n\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const UserManagement = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { retrievedProfile } = useProfile();\n  const [open, setOpen] = useState<boolean>(false);\n  const [openToast, setOpenToast] = useState<boolean>(false);\n  const [openDetails, setOpenDetails] = useState<boolean>(false);\n  const [selectedUser, setSelectedUser] = useState<any | null>(null);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [accountContacts, setAccountContacts] = useState([]);\n  const { user, isAuthenticated, getAccessTokenSilently } = useAuth0();\n  const [crmToken, setCrmToken] = useState('');\n  const [token, setToken] = useState('');\n  const [loading, setLoading] = useState<boolean>(true);\n  const [listLoading, setListLoading] = useState<boolean>(true);\n  const [isMobile, setIsMobile] = React.useState(false);\n  const [hasError, setHasError] = useState(false);\n  const [reload, setReload] = useState(false);\n\n  const line = retrievedProfile?.portalFixedAdministrator ? 'Fixed' : 'Wholesale';\n\n  const handleWindowSizeChange = (): void => {\n    setIsMobile(window.innerWidth <= 640);\n  };\n  const columns = useColumns();\n  React.useEffect(() => {\n    handleWindowSizeChange();\n    window.addEventListener('resize', handleWindowSizeChange);\n    return (): void => {\n      window.removeEventListener('resize', handleWindowSizeChange);\n    };\n  }, []);\n\n  const correlationId = CORRELATION_ID;\n  useEffect(() => {\n    const fetchUserToken = async (): Promise<string> => getAccessTokenSilently();\n\n    fetchUserToken()\n      .then((userToken: string) => {\n        if (userToken) {\n          setToken(userToken);\n          sessionStorage.setItem('accessToken', userToken);\n        }\n      })\n      .catch(() => {});\n  }, [token, isAuthenticated]);\n\n  useEffect(() => {\n    if (!token) return;\n\n    const fetchToken = async (): Promise<void> => {\n      try {\n        const response = await getToken(correlationId);\n        const accessToken = response?.data?.accessToken;\n\n        if (accessToken) {\n          setCrmToken(accessToken);\n          sessionStorage.setItem('cToken', accessToken);\n        }\n      } catch (err) {\n        console.error('Error fetching token:', err);\n      }\n    };\n\n    fetchToken().catch(console.error);\n  }, [token, correlationId]);\n\n  useEffect(() => {\n    setListLoading(true);\n    if (!crmToken) return;\n\n    const fetchAccountContacts = (): void => {\n      const email = JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress;\n      getAccountContacts(email, correlationId, crmToken)\n        .then((response) => {\n          setAccountContacts(\n            response.data.map((item: any) => ({\n              name: item?.name,\n              salutation: item?.salutation,\n              email: item?.email,\n              id: item?.Id,\n              reportsToId: item?.reportsToId,\n              status: item?.isInactive ? 'Disabled' : 'Active',\n              modified: item?.lastModified,\n              created: item?.createdDate,\n              mobileNumber: item?.mobileNumber,\n              portalAccessArray: item?.portalAccessArray,\n              homePhone: item?.homePhone,\n              otherPhone: item?.otherPhone,\n              portal:\n                line === 'Fixed'\n                  ? Array.from(new Set(item?.portalAccessPolicies?.fixedProducts))\n                  : Array.from(new Set(item?.portalAccessPolicies?.wholesaleProducts)),\n              login: item?.login,\n              contactDetails: {\n                streetAddress: item?.address?.streetAddress,\n                city: item?.address?.city,\n                provinceOrState: item?.address?.state,\n                country: item?.address?.country,\n                zipOrPostalCode: item?.address?.postalCode,\n                phoneNumber: item?.phoneNumber,\n              },\n              workDetails: {\n                businessLine: item?.businessLine,\n                contactCategory: item?.contactCategory,\n                position: item?.position,\n                department: item?.department,\n                reportsTo: item?.reportsTo,\n                description: item?.description,\n              },\n            }))\n          );\n          setListLoading(false);\n          setReload(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching account contacts:', error);\n          setListLoading(false);\n          setReload(false);\n        });\n    };\n\n    fetchAccountContacts();\n  }, [crmToken, profile, reload]);\n\n  const secretKey = 'mtn-bayobab-secret'; // choose any secret key\n  const encryptedContacts = CryptoJS.AES.encrypt(\n    JSON.stringify(accountContacts),\n    secretKey\n  ).toString();\n\n  sessionStorage.setItem('accountContacts', encryptedContacts);\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const handleSubmit = (): void => {\n    const data = {\n      body: {\n        No_Longer_With_Company__c: selectedUser?.status === 'Active' ? true : false,\n      },\n    };\n\n    editUserStatus(selectedUser?.id, correlationId, data)\n      .then((response: any) => {\n        setOpenToast(true);\n        setReload(true);\n      })\n      .catch((error: any) => {\n        setHasError(true);\n        setOpenToast(true);\n        console.error('API error:', error);\n      });\n  };\n\n  const handleCloseToast = (): void => {\n    setOpenToast(false);\n  };\n\n  const handleCloseDetails = (): void => {\n    setOpenDetails(false);\n  };\n\n  const handleOpenModal = (): void => {\n    setOpen(true);\n  };\n\n  const handleCloseModal = (): void => {\n    setOpen(false);\n  };\n\n  const { logout } = useAuth0();\n\n  const navigate = useNavigate();\n\n  const actionsList = useMemo(\n    () => [\n      {\n        label: 'View details',\n        icon: 'PasswordVisible',\n        onClick: (row: any): void => {\n          setSelectedUser(row);\n          setOpenDetails(true);\n        },\n      },\n      {\n        label: 'Edit details',\n        icon: 'Edit',\n        onClick: (row: any): void => {\n          navigate('edit-user', { state: { user: row } });\n        },\n      },\n      {\n        getLabel: (row: any): any => (row.status === 'Active' ? 'Disable' : 'Reactivate'),\n        getIcon: (row: any): any => (row.status === 'Active' ? 'Blocked' : 'Tick'),\n        onClick: (row: any): void => {\n          setSelectedUser(row);\n          setOpen(true);\n        },\n      },\n    ],\n    [selectedUser]\n  );\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      overviewText: 'User management',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      backIcon: false,\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const filteredContacts = accountContacts\n    .filter((contact: any) => contact?.workDetails?.businessLine?.includes(line))\n    .sort((a: any, b: any) => {\n      const dateA = new Date(a.created);\n      const dateB = new Date(b.created);\n      return dateB.getTime() - dateA.getTime();\n    });\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            {openToast && (\n              <ToastProvider duration={3000} $inverse={false}>\n                <ToastNotification\n                  style={{ position: 'fixed', top: '1rem', right: '1rem' }}\n                  onOpenChange={() => handleCloseToast()}\n                  title={\n                    selectedUser?.status !== 'Active'\n                      ? hasError\n                        ? 'Error reactivating user'\n                        : 'User reactivated'\n                      : hasError\n                        ? 'Error disabling user'\n                        : 'User disabled'\n                  }\n                  $inverse={false}\n                >\n                  <ToastDescription $inverse={false}>\n                    {selectedUser?.status !== 'Active'\n                      ? hasError\n                        ? 'We’re experiencing an unexpected error. Please try again later.'\n                        : 'The user has been granted access to Communication Platforms.'\n                      : hasError\n                        ? 'We’re experiencing an unexpected error. Please try again later.'\n                        : 'The user’s access to Communication Platforms has been revoked. You can reactivate them anytime.'}\n                  </ToastDescription>\n                  <ToastAction label='Action' $inverse={false} altText={''} />\n                </ToastNotification>\n              </ToastProvider>\n            )}\n            {openDetails && (\n              <UserDetails\n                user={selectedUser}\n                openModal={handleOpenModal}\n                closeDetails={handleCloseDetails}\n              />\n            )}\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-user-management'\n                  src={urls.header}\n                  moduleType=''\n                  config={defaultConfig}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'User Management Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            {open && (\n              <UserModal\n                closeModal={handleCloseModal}\n                handleSubmit={handleSubmit}\n                user={selectedUser}\n              />\n            )}\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper style={isMobile ? { display: 'block' } : { display: 'flex' }}>\n                  <HeadingConatiner style={isMobile ? { marginBottom: '1.5rem' } : {}}>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      {line === 'Fixed'\n                        ? ' Manage Fibre Solutions Users'\n                        : 'Manage Communication Platforms Users'}\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      {line === 'Fixed'\n                        ? 'View and manage all Fibre Solutions users within your organisation’s Bayobab Central account.'\n                        : 'View and manage all Communication Platforms users within your organisation’s Bayobab Central account.'}\n                    </Text>\n                  </HeadingConatiner>\n                  <StandardButton\n                    $isFullWidth={isMobile}\n                    icon={<PlusWithCircle />}\n                    label='Add New User'\n                    onClick={() => navigate('/user-management/create-user')}\n                  />\n                </HeadingWrapper>\n                {listLoading ? (\n                  <Loading isLoading={true} />\n                ) : (\n                  <FeatureAppLoader\n                    featureAppId='fa-user-management'\n                    src={urls.table}\n                    moduleType=''\n                    config={{\n                      columns,\n                      data: filteredContacts,\n                      hasActions: true,\n                      actionsList: actionsList,\n                      isExpandable: false,\n                      expandableData: expandableData,\n                      filterCategories:\n                        line === 'Fixed' ? filterCategories : filterWholesaleCategories,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({\n                      error,\n                      featureAppNode,\n                      // loading,\n                    }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'User Management Table'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                )}\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import apiClient from '../interceptors/auth-interceptor';\n\nexport const getAccountContacts = async (\n  email: string,\n  correlationId: string,\n  token: string\n): Promise<any> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-central-list-account-contacts`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n      token,\n    },\n  });\n  return response.data;\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport apiClient from '../interceptors/auth-interceptor';\n\nexport const editUserStatus = async (\n  contactId: string,\n  correlationId: string,\n  data: any\n): Promise<any> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n\n  const response = await apiClient.post(url, data, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId: correlationId,\n      contactId: contactId,\n      type: 'update',\n    },\n  });\n  return response.data;\n};\n","// eslint-disable @typescript-eslint/no-explicit-any\n// eslint-disable @typescript-eslint/explicit-module-boundary-types\nimport React from 'react';\nimport { UpArrowWithCircle, CloseWithCircle } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StatusTag, StatusText } from '../ServiceInventory/ServiceInventory.style';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\n\nexport const columns = [\n  // {\n  //   key: 'requestId',\n  //   label: 'RID',\n  //   sortable: 'numerical',\n  //   /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n  //   render: (row: any): JSX.Element => (\n  //     <Text as='span' $fontStyle='caption-regular'>\n  //       {row._id}\n  //     </Text>\n  //   ),\n  // },\n  {\n    key: 'requestName',\n    label: 'Req. Name',\n    sortable: 'alphabetical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.formName}\n      </Text>\n    ),\n  },\n  {\n    key: 'product',\n    label: 'Product',\n    sortable: 'alphabetical',\n    /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n    render: (row: any): JSX.Element => {\n      let displayType;\n      switch (row.formType) {\n        case 'Dedicated Internet Access':\n          displayType = 'DIA';\n          break;\n        case 'National Private Leased Circuit':\n          displayType = 'NPLC';\n          break;\n        case 'International Private Leased Circuit':\n          displayType = 'IPLC';\n          break;\n        default:\n          displayType = row.formType;\n      }\n      return (\n        <Text as='span' $fontStyle='caption-regular'>\n          {displayType}\n        </Text>\n      );\n    },\n  },\n  {\n    key: 'status',\n    label: 'Status',\n    /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n    render: (row: any): JSX.Element =>\n      row.status === 'Submitted' ? (\n        <StatusTag colour='positive'>\n          <StatusIndicator $color='positive' />\n          <StatusText colour='positive'>{row.status}</StatusText>\n        </StatusTag>\n      ) : (\n        <StatusTag colour='disabled'>\n          <StatusIndicator $color='disabled' />\n          <StatusText colour='disabled'>{row.status}</StatusText>\n        </StatusTag>\n      ),\n  },\n  {\n    key: 'submittedOn',\n    label: 'Submitted On',\n    /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n    render: (row: any): JSX.Element => {\n      const formatDate = (dateString: string): string => {\n        if (!dateString) return '';\n        const date = new Date(dateString);\n        if (isNaN(date.getTime())) return dateString;\n        const day = date.getDate();\n        const month = date.toLocaleString('default', { month: 'long' });\n        const year = date.getFullYear();\n        return `${day} ${month} ${year}`;\n      };\n      return (\n        <Text as='span' $fontStyle='caption-regular'>\n          {formatDate(row.submittedAt)}\n        </Text>\n      );\n    },\n  },\n];\n\nexport const actionsList = [\n  {\n    label: 'Continue editing',\n    icon: <UpArrowWithCircle />,\n    onClick: (): void => {},\n  },\n  {\n    label: 'View',\n    icon: <CloseWithCircle />,\n    onClick: (): void => {},\n  },\n  {\n    label: 'Delete',\n    icon: <CloseWithCircle />,\n    onClick: (): void => {},\n  },\n];\n\nexport const filterCategories = [\n  {\n    columnKey: 'product',\n    label: 'Product',\n    fields: ['formType'],\n    options: [\n      { label: 'DIA', value: 'dia' },\n      { label: 'IPLC', value: 'iplc' },\n      { label: 'International IP Transit', value: 'international ip transit' },\n      { label: 'L2 VPN', value: 'l2 vpn' },\n      { label: 'L3 VPN', value: 'l3 vpn' },\n      { label: 'NPLC', value: 'nplc' },\n    ],\n  },\n];\n","import React from 'react';\nimport { ToastDescription, ToastNotification, ToastProvider } from '@mtnkente/paragon-overlays';\n\ninterface DynamicToastNotificationProps {\n  title: string;\n  description?: string;\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n}\n\nconst DynamicToastNotification = ({\n  title,\n  description,\n  open,\n  onOpenChange,\n}: DynamicToastNotificationProps): JSX.Element => {\n  return (\n    <div style={{ position: 'fixed', zIndex: 1000 }}>\n      <ToastProvider swipeDirection='up' duration={10000} $inverse={false}>\n        <ToastNotification\n          open={open}\n          onOpenChange={onOpenChange}\n          onSwipeCancel={() => onOpenChange(false)}\n          title={title}\n          duration={10000}\n          type='background'\n        >\n          <ToastDescription>{description}</ToastDescription>\n        </ToastNotification>\n      </ToastProvider>\n    </div>\n  );\n};\n\nexport default DynamicToastNotification;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Docs, Logout, PlusWithCircle, Send, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport {\n  ButtonWrapper,\n  HeadingConatiner,\n  HeadingWrapper,\n  TableContainer,\n} from '../ServiceInventory/ServiceInventory.style';\nimport { columns, actionsList, filterCategories } from './ServiceRequest.config';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { CustomerProfile, ServiceForm } from '../../../../models';\nimport DynamicToastNotification from '../ToastNotification/ToastNotification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { getServiceRequests } from '../../../../apis/get-service-requests';\nimport FeedbackModal from '../../feedback/feedbackModal/FeedbackModal';\nimport { useShouldShowFeedback } from '../../../../utils/get-submission-period';\nimport { useFetchSubmissions } from '../../../../hooks/use-fetch-submissions';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  serviceRequests?: ServiceForm[];\n  logoutF?: () => Promise<void>;\n}\n\nexport const ServiceRequestTable = ({\n  profile,\n  isSupueruser,\n  serviceRequests,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const navigate = useNavigate();\n  const location = useLocation();\n  const [showDraftToastNotification, setShowDraftToastNotification] = useState<boolean>(false);\n  const [showSubmitToastNotification, setShowSubmitToastNotification] = useState<boolean>(false);\n  const [showToast, setShowToast] = useState(false);\n  const [showFeedbackModal, setShowFeedbackModal] = useState(false);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [submissions, updateSubmissions] = useState<any[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [userServiceRequests, setUserServiceRequests] = useState<ServiceForm[]>(\n    serviceRequests ?? []\n  );\n  //const [hasError, setHasError] = useState<boolean>(false);\n  const [loadingData, setLoadingData] = useState<boolean>(true);\n\n  useEffect(() => {\n    if (!profile?.emailAddress) return;\n    let polling = true;\n    const fetchServiceRequests = async (): Promise<void> => {\n      const token = localStorage.getItem('accessToken');\n      try {\n        const requests = await getServiceRequests(profile.emailAddress, correlationId, token!);\n        setUserServiceRequests((requests.data ?? []).slice().reverse());\n        setLoadingData(false);\n      } catch (error) {\n        console.error('Error fetching service requests:', error);\n        //setHasError(true);\n      }\n    };\n    fetchServiceRequests().catch(console.error);\n    const intervalId = setInterval(() => {\n      if (polling) fetchServiceRequests().catch(console.error);\n    }, 5000);\n    return (): any => {\n      polling = false;\n      clearInterval(intervalId);\n    };\n  }, [profile?.emailAddress]);\n\n  useEffect(() => {\n    if (serviceRequests && serviceRequests.length > 0) {\n      localStorage.setItem('serviceRequests', JSON.stringify(serviceRequests));\n    } else if (userServiceRequests && userServiceRequests.length > 0) {\n      localStorage.setItem('serviceRequests', JSON.stringify(userServiceRequests));\n    }\n  }, [serviceRequests]);\n\n  const metricData = useMemo(() => {\n    const dataSource = userServiceRequests;\n    return [\n      {\n        title: 'Requests',\n        description: 'Total requests',\n        icon: <Docs />,\n        data: dataSource.length,\n      },\n      {\n        title: 'Submitted requests',\n        description: 'Total requests submitted',\n        icon: <Send />,\n        data: dataSource.filter((request) => request.status === 'Submitted').length,\n      },\n      {\n        title: 'Draft requests',\n        description: 'Total draft requests',\n        icon: <Docs />,\n        data: dataSource.filter((request) => request.status === 'Draft').length,\n      },\n    ];\n  }, [serviceRequests, userServiceRequests]);\n\n  useEffect(() => {\n    const storedData = localStorage.getItem('serviceRequests');\n    if (storedData) {\n      setUserServiceRequests(JSON.parse(storedData));\n    }\n  }, []);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const searchParams = new URLSearchParams(location.search);\n  const isDraft = searchParams.get('isDraft') === 'true';\n  const isSubmitted = searchParams.get('isSubmitted') === 'true';\n\n  useFetchSubmissions({\n    correlationId,\n    isSubmitted,\n    updateSubmissions,\n  });\n\n  const shouldShowFeedback = useShouldShowFeedback(submissions, 'specifications');\n\n  useEffect(() => {\n    if (!submissions.length) {\n      return;\n    }\n    if (shouldShowFeedback && isSubmitted) {\n      setShowFeedbackModal(true);\n    }\n  }, [isSubmitted, submissions]);\n\n  useEffect(() => {\n    if (isDraft || isSubmitted) {\n      if (isDraft) {\n        setShowDraftToastNotification(true);\n      }\n      if (isSubmitted) {\n        setShowSubmitToastNotification(true);\n      }\n      const params = new URLSearchParams(window.location.search);\n      params.delete('isDraft');\n      params.delete('isSubmitted');\n      const newUrl = `${window.location.pathname}${params.toString() ? '?' + params.toString() : ''}`;\n      window.history.replaceState({}, '', newUrl);\n    }\n  }, [isDraft, isSubmitted]);\n\n  useEffect(() => {\n    if (showDraftToastNotification || showSubmitToastNotification) {\n      setShowToast(true);\n    }\n  }, [showDraftToastNotification, showSubmitToastNotification]);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    metricCards: process.env.REACT_APP_FA_PRODUCT_CARDS_URL ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Service requests',\n      title: 'Post Login',\n      backIcon: false,\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.metricCards || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          {(showDraftToastNotification || showSubmitToastNotification) && (\n            <DynamicToastNotification\n              title={showDraftToastNotification ? 'Draft Saved' : 'Service Request Submitted'}\n              description={\n                showDraftToastNotification\n                  ? 'Your Service Request draft has been saved. You can continue where you left off when ready.'\n                  : 'Your Service Request has been successfully submitted. You can track it here.'\n              }\n              open={showToast}\n              onOpenChange={(open) => {\n                setShowToast(open);\n                if (!open) {\n                  // Optionally reset flags here\n                  setShowDraftToastNotification(false);\n                  setShowSubmitToastNotification(false);\n                }\n              }}\n            />\n          )}\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-services'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Services Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      Your service requests\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      View, track, and initiate service requests.\n                    </Text>\n                  </HeadingConatiner>\n                  <ButtonWrapper>\n                    <StandardButton\n                      icon={<PlusWithCircle />}\n                      label='Request New Service'\n                      onClick={() => navigate('/converge/services/request-new-service')}\n                      $isFullWidth={true}\n                    />\n                  </ButtonWrapper>\n                </HeadingWrapper>\n                {loadingData ? (\n                  <Loading isLoading={true} />\n                ) : (\n                  <>\n                    <FeatureAppLoader\n                      featureAppId='fa-converge-metric-cards'\n                      src={urls.metricCards}\n                      moduleType=''\n                      config={{ metricData: true, data: metricData }}\n                      onError={(error: unknown): unknown => error}\n                    >\n                      {({\n                        error,\n                        featureAppNode,\n                        // loading,\n                      }: CustomFeatureAppRenderingParams): ReactElement => {\n                        return error ? (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            <ErrorUi productName={'Converge Metric Card'} />\n                          </Col>\n                        ) : (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            {featureAppNode}\n                          </Col>\n                        );\n                      }}\n                    </FeatureAppLoader>\n                    <FeatureAppLoader\n                      featureAppId='fa-converge-service-inventory'\n                      src={urls.table}\n                      moduleType=''\n                      config={{\n                        columns: columns,\n                        data: userServiceRequests,\n                        hasActions: true,\n                        actionsList: actionsList,\n                        filterCategories: filterCategories,\n                      }}\n                      onError={(error: unknown): unknown => error}\n                    >\n                      {({\n                        error,\n                        featureAppNode,\n                        // loading,\n                      }: CustomFeatureAppRenderingParams): ReactElement => {\n                        return error ? (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            <ErrorUi productName={'Service Inventory Table'} />\n                          </Col>\n                        ) : (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            {featureAppNode}\n                          </Col>\n                        );\n                      }}\n                    </FeatureAppLoader>\n                    {showFeedbackModal && (\n                      <FeedbackModal\n                        setIsVisible={setShowFeedbackModal}\n                        isVisible={!!showFeedbackModal}\n                        profile={profile}\n                        formType={'specifications'}\n                      />\n                    )}\n                  </>\n                )}\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { Lightning, Logout, Document, UserSymbol, UserGroup } from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { ComboButtons, StandardButton } from '@mtnkente/paragon-buttons';\nimport { useNavigate } from 'react-router-dom';\nimport { HeadingConatiner, HeadingWrapper } from '../ServiceInventory/ServiceInventory.style';\nimport { CustomerProfile } from '../../../../models';\nimport { ButtonContainer, FeatureWrapper } from './ServiceRequest.styles';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const ServiceRequestSelection = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const navigate = useNavigate();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    selectCards: process.env.REACT_APP_FA_PRODUCT_CARDS_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Service requests',\n      title: 'Post Login',\n      backIcon: true,\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const getProductFromPath = (): string | null => {\n    const pathname = window.location.pathname.replace(/\\/+$/, '');\n    const pathSegments = pathname.split('/').filter(Boolean);\n\n    return pathSegments.length ? pathSegments[pathSegments.length - 1] : null;\n  };\n\n  const productName = getProductFromPath();\n\n  const navigateToPage = (value: string): void => {\n    if (value === 'quick-quote') {\n      navigate(`/converge/services/quick-quote/${productName}`);\n    } else {\n      navigate(`/converge/services/request-new-service/${productName}`);\n    }\n  };\n\n  const [pageValue, setPageValue] = useState('');\n\n  const cardData = [\n    {\n      title: 'Start with a Quick Quote',\n      description:\n        'Get an instant price estimate by entering basic details of the service you require.',\n      icon: <Lightning />,\n      value: 'quick-quote',\n      onClick: (value: string): void => {\n        setPageValue(value);\n      },\n    },\n    {\n      title: 'Submit technical specifications',\n      description:\n        'Skip the estimate and submit technical information to receive a firm and final offer.',\n      icon: <Document />,\n      value: 'technical-form',\n      onClick: (value: string): void => {\n        setPageValue(value);\n      },\n    },\n  ];\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.selectCards ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-services'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Services Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <FeatureWrapper>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      How would you like to start?\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      Generate a Quick Quote for a pricing estimate or submit technical specs to\n                      request a firm offer.\n                    </Text>\n                  </HeadingConatiner>\n                </HeadingWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-converge-select-cards'\n                  src={urls.selectCards}\n                  moduleType=''\n                  config={{ selectData: true, data: cardData }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Select Card'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n                <ButtonContainer>\n                  <ComboButtons>\n                    <StandardButton\n                      label='Cancel'\n                      $variant='secondary'\n                      onClick={() => navigate('/converge/services/request-new-service')}\n                      $isFullWidth={false}\n                    />\n                    <StandardButton\n                      label='Get started'\n                      $variant='primary'\n                      onClick={() => navigateToPage(pageValue)}\n                      disabled={!pageValue}\n                      $isFullWidth={false}\n                    />\n                  </ComboButtons>\n                </ButtonContainer>\n              </FeatureWrapper>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import { diaCountriesBandwidth } from '../../../QuickQuotes/CustomiseProduct/DiaFormDataSets';\nimport { twoVpnCountriesBandwidth } from '../../../QuickQuotes/CustomiseProduct/L2vpnFormDataSets';\n\nexport const forms: formTypes = {\n  '/converge/services/quick-quote/l2vpn': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Basic Quick Quote Details',\n        buttonLabel: 'Generate Quote',\n        formSections: [\n          {\n            title: 'Basic Details',\n            titleHasBackground: true,\n            bodyText: 'Enter the following basic details to generate a Quick Quote.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Location A Country',\n                name: 'country',\n                type: 'dropdown',\n                options: twoVpnCountriesBandwidth.map((country) => ({\n                  label: country.country,\n                })),\n                isOptional: false,\n                dropdownSearch: true,\n              },\n              {\n                label: 'Location B Country',\n                name: 'countryDestination',\n                type: 'dropdown',\n                options: twoVpnCountriesBandwidth.map((country) => ({\n                  label: country.country,\n                })),\n                isOptional: false,\n                dropdownSearch: true,\n              },\n            ],\n          },\n          {\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                options: [],\n                isOptional: false,\n                dropdownSearch: true,\n              },\n              { type: 'spaceHolder' },\n            ],\n          },\n          {\n            fields: [\n              {\n                label: 'Select contract term',\n                name: 'contractTerm',\n                type: 'selectCards',\n                options: [\n                  { label: '12 Months', description: 'Short term contract' },\n                  { label: '24 Months', description: 'Medium term contract' },\n                  { label: '36 Months', description: 'Long term contract' },\n                ],\n                isOptional: false,\n                dropdownSearch: true,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: '',\n        buttonLabel: 'Proceed To Firm Request',\n        formSections: [],\n        isQuoteSummary: true,\n      },\n    ],\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      console.log('🚀 Final submission:', formData);\n      alert('form data submitted: ' + JSON.stringify(formData, null, 2));\n    },\n  },\n  '/converge/services/quick-quote/dia': {\n    steps: [\n      //STEP 1\n      {\n        //SECTION 1 - Location A\n        heading: 'Basic Quick Quote Details',\n        buttonLabel: 'Generate Quote',\n        formSections: [\n          {\n            title: 'Basic Details',\n            titleHasBackground: true,\n            bodyText: 'Enter the following basic details to generate a Quick Quote.',\n            isAdjacent: true,\n            fields: [\n              {\n                label: 'Location Country',\n                name: 'country',\n                type: 'dropdown',\n                options: diaCountriesBandwidth.map((country) => ({\n                  label: country.country,\n                })),\n                isOptional: false,\n                dropdownSearch: true,\n              },\n              {\n                label: 'Bandwidth',\n                name: 'bandwidth',\n                type: 'dropdown',\n                isOptional: false,\n                options: [],\n                dropdownSearch: true,\n              },\n            ],\n          },\n          {\n            fields: [\n              {\n                label: 'Select contract term',\n                name: 'contractTerm',\n                type: 'selectCards',\n                options: [\n                  { label: '12 Months', description: 'Short term contract' },\n                  { label: '24 Months', description: 'Medium term contract' },\n                  { label: '36 Months', description: 'Long term contract' },\n                ],\n                isOptional: false,\n                dropdownSearch: true,\n              },\n            ],\n          },\n        ],\n      },\n      //FINAL STEP\n      {\n        heading: '',\n        buttonLabel: 'Proceed To Firm Request',\n        formSections: [],\n        isQuoteSummary: true,\n      },\n    ],\n    handleSubmit: (formData: { [key: string]: string }): void => {\n      console.log('🚀 Final submission:', formData);\n      alert('form data submitted: ' + JSON.stringify(formData, null, 2));\n    },\n  },\n};\n\ntype FormSection = {\n  title?: string; // made optional for sections like dividers\n  titleHasBackground?: boolean; // added to allow sections with background\n  hideTitle?: boolean; // added to allow sections without title\n  isAdjacent?: boolean;\n  fields: any[];\n  bodyText?: string;\n};\n\ntype FormData = {\n  [key: string]: string;\n};\n\ntype Form = {\n  steps: {\n    heading: string;\n    buttonLabel: string;\n    formSections: FormSection[];\n    isQuoteSummary?: boolean;\n  }[];\n  handleSubmit: (formData: FormData) => void;\n};\n\ntype FormKey = '/converge/services/quick-quote/dia' | '/converge/services/quick-quote/l2vpn';\n\nexport type formTypes = {\n  [key in FormKey]: Form;\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { CustomerProfile } from '../../../../models';\n\nimport { Logout, UserGroup, Notification, UserSymbol } from '@mtnkente/paragon-icons';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport Loading from '../../../../Loading/Loading';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { forms } from './configs/quick-quote-form.configs';\nimport { NavigationServiceV1 } from '../../../../services/NavigationService';\nimport { DynamicServiceV1 } from '../../../../services/DynamicDataService';\nimport { QQ_DIA_SERVICE_PAGE, QQ_L2VPN_SERVICE_PAGE } from '../../../../utils';\nimport { useLocation } from 'react-router-dom';\nimport { diaCountriesBandwidth } from '../../QuickQuotes/CustomiseProduct/DiaFormDataSets';\nimport { twoVpnCountriesBandwidth } from '../../QuickQuotes/CustomiseProduct/L2vpnFormDataSets';\n\ninterface TechnicalSPecificationsFormProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  fetchData?: any;\n  dynamicData?: DynamicServiceV1;\n  navigationService?: NavigationServiceV1;\n  apiClientService?: any;\n  logoutF?: () => Promise<void>;\n}\n\nconst QuickQuotesBasicForm = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: TechnicalSPecificationsFormProps): ReactElement => {\n  const [currentUrl, setCurrentUrl] = useState<keyof typeof forms | undefined>(undefined);\n  const { user } = useAuth0();\n  const location = useLocation();\n\n  useEffect(() => {\n    setCurrentUrl(location.pathname.toString() as keyof typeof forms);\n  }, []);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const serviceNameMap: Record<string, string> = {\n    [QQ_L2VPN_SERVICE_PAGE]: 'L2VPN',\n    [QQ_DIA_SERVICE_PAGE]: 'DIA',\n  };\n  const currentService = serviceNameMap[location.pathname] ?? '';\n\n  const HeaderData = {\n    username: profile?.fullName ?? 'Michelle',\n    fullName: profile?.fullName,\n    emailAddress: profile?.emailAddress,\n    companyDetails: profile?.companyDetails?.name,\n    isSupueruser: isSupueruser,\n    img: user?.picture,\n    themeMode: 'light',\n    myProfileText: 'My Profile',\n    logoutText: 'Logout',\n    viewType: 'overview',\n    upcomingServicesText: '',\n    supportTicketText: '',\n    feedbackText: '',\n    overviewText: `${currentService} Quick Quote`,\n    title: 'Post Login',\n    ThemeProvider: 'theme',\n    backIcon: true,\n    imgProfileRailMenuItems: [\n      {\n        id: '1',\n        label: 'View Profile',\n        icon: <UserSymbol />,\n        redirectUrl: '/profile',\n        activeTab: '',\n      },\n      {\n        id: '2',\n        label: 'Notification Preferences',\n        icon: <Notification />,\n        redirectUrl: '/notification',\n        activeTab: '',\n      },\n    ],\n    company: [\n      {\n        id: '1',\n        label: 'User Management',\n        icon: <UserGroup />,\n        redirectUrl: '/user-management',\n        activeTab: '',\n      },\n    ],\n    logOutState: [\n      {\n        id: '1',\n        label: 'Logout',\n        icon: <Logout />,\n        redirectUrl: '/',\n        activeTab: '',\n      },\n    ],\n\n    login: logoutF,\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.connectForm ? (\n        <Loading isLoading={true} />\n      ) : (\n        <>\n          <DashboardWrapper data-testid='dashboard-app-container'>\n            <div data-testid='dashboard-shell-container' style={{ gap: '1.5rem' }}>\n              <HeaderWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </HeaderWrapper>\n\n              <FeatureAppLoader\n                featureAppId='fa-request-product'\n                src={urls.connectForm}\n                moduleType=''\n                config={{\n                  data: currentUrl ? forms[currentUrl] : undefined,\n                  userInfo: profile,\n                  type: 'technical',\n                  additionalDataSets: {\n                    diaCountriesBandwidth,\n                    twoVpnCountriesBandwidth,\n                  },\n                  currentUrl: currentUrl,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Request Product'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </div>\n          </DashboardWrapper>\n        </>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default QuickQuotesBasicForm;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  Logout,\n  UserGroup,\n  Notification,\n  UserSymbol,\n  PlusWithCircle,\n} from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\n\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\n\nimport { CustomerProfile } from '../../../../models';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\n\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { Text } from '@mtnkente/paragon-display';\nimport * as CryptoJS from 'crypto-js';\nimport {\n  HeadingWrapper,\n  HeadingConatiner,\n  TableContainer,\n  FormContainer,\n} from '../userManagementTable/UserManagement.style';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { editFormContent, editWholesaleContent } from '../formdata';\nimport { CircularIndeterminate } from '@mtnkente/paragon-indicators';\nimport { BodyText } from '../createUser/loader/Loader.styled';\n\ninterface DashboardProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  isOpenModal: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const EditUserDetails = ({\n  name,\n  profile,\n  isSupueruser,\n  logoutF,\n  // isOpenModal,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const { retrievedProfile, userServiceInventory } = useProfile();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [accountContacts, setAccountContacts] = useState([]);\n  const location = useLocation();\n  const selectedUser = location.state?.user;\n\n  const [formdata, setFormData] = useState<any>({});\n\n  const correlationId = CORRELATION_ID;\n  const navigate = useNavigate();\n\n  useEffect(() => {\n    const secretKey = 'mtn-bayobab-secret';\n\n    const encryptedContacts = sessionStorage.getItem('accountContacts');\n\n    if (encryptedContacts) {\n      try {\n        const bytes = CryptoJS.AES.decrypt(encryptedContacts, secretKey);\n        const decryptedData = bytes.toString(CryptoJS.enc.Utf8);\n        setAccountContacts(JSON.parse(decryptedData));\n      } catch (err) {\n        console.error('Error decrypting account contacts:', err);\n      }\n    }\n  }, [selectedUser]);\n\n  useEffect(() => {\n    const fetchFormData = async (): Promise<void> => {\n      try {\n        const content = profile?.portalFixedAdministrator\n          ? await editFormContent(userServiceInventory)\n          : await editWholesaleContent();\n\n        setFormData(content);\n      } catch (error) {\n        console.error('Error loading form content:', error);\n      }\n    };\n\n    // eslint-disable-next-line no-void\n    void (async (): Promise<void> => {\n      await fetchFormData();\n    })();\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, [profile]);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    form: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  // };\n\n  const defaultConfig = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Edit user',\n      backIcon: true,\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  if (!urls.header || !urls.form) {\n    return <Loading isLoading={true} />;\n  }\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <DashboardWrapper data-testid='dashboard-app-container'>\n        <div data-testid='dashboard-shell-container'>\n          <HeaderWrapper>\n            {!loading && (\n              <FeatureAppLoader\n                featureAppId='fa-header-edit-details'\n                src={urls.header}\n                moduleType=''\n                config={defaultConfig}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Edit User Details Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            )}\n          </HeaderWrapper>\n          <HeadingWrapper style={{ marginTop: '2rem', marginBottom: '2rem' }}>\n            <HeadingConatiner>\n              <Text $colour='full' $fontStyle='title-large-bold'>\n                Edit {selectedUser.name}’s details\n              </Text>\n              <Text $colour='subtle' $fontStyle='body-small-regular'>\n                Update this user’s personal, contact, and access information. Changes will apply\n                immediately once saved.\n              </Text>\n            </HeadingConatiner>\n          </HeadingWrapper>\n\n          <FormContainer>\n            {Object.keys(formdata)?.length === 0 ? (\n              <>\n                <div\n                  style={{\n                    display: 'flex',\n                    flexDirection: 'column',\n                    alignItems: 'center',\n                    justifyContent: 'center',\n                    height: '100vh',\n                  }}\n                >\n                  <CircularIndeterminate size='large' />\n                  <BodyText style={{ marginTop: '1rem' }}>Loading form, please wait...</BodyText>\n                </div>\n              </>\n            ) : (\n              <>\n                {' '}\n                <FeatureAppLoader\n                  featureAppId='fa-edit-details-form'\n                  src={urls.form}\n                  moduleType=''\n                  config={{\n                    data: formdata,\n                    userData: { ...selectedUser, accountContacts },\n                    hasRecaptcha: false,\n                    type: 'edit',\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Connect Form'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </>\n            )}\n          </FormContainer>\n        </div>\n      </DashboardWrapper>\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","export const faqConfig = [\n  {\n    title: 'How do I log in to the Bayobab Customer Portal?',\n    content:\n      'You can click the Login button at the top right corner of the landing page, which will guide you through the login process',\n  },\n  {\n    title: \"I've forgotten my password. What do I do?\",\n    content:\n      'When you reach the password entry stage of the login process, click on Forgot my Password. You will then be prompted to reset your password.',\n  },\n  {\n    title: 'Where do I find the link to the ServiceNow portal?',\n    content:\n      'Below the list of FAQs, click the Log A Ticket button to be redirected to the ServiceNow portal.',\n  },\n  {\n    title: 'Do I need a separate login for ServiceNow?',\n    content:\n      'When logged into the customer portal, you can access ServiceNow through single sign-on, without needing to re-enter your login credentials.',\n  },\n  {\n    title: 'What if I have an issue with the Bayobab portal itself?',\n    content:\n      'If you’re unable to access the portal to submit a query or log a ticket, you can still log in to ServiceNow directly by clicking the Log A Ticket button.',\n  },\n];\n","import React from 'react';\nimport { Send } from '@mtnkente/paragon-icons';\n\nconst interests = [\n  'Fibre Solutions',\n  'Communication Platforms',\n  'Tools & Resources',\n  'Billing & Accounts',\n  'General Enquiry',\n];\n\nexport const supportFormData = {\n  title: 'Need additional help? Contact us',\n  introText:\n    'If you can’t find the answer you’re looking for in our FAQs, our team is here to help. Fill in the form below and we’ll get back to you as soon as possible.',\n\n  formSections: [\n    {\n      isAdjacent: true,\n      fields: [\n        { label: 'Full Name', name: 'name', type: 'text', isOptional: false },\n        { label: 'Company Name', name: 'company', type: 'text', isOptional: false },\n      ],\n    },\n    {\n      isAdjacent: true,\n      fields: [\n        { label: 'Business Email Address', name: 'emailAddress', type: 'email', isOptional: false },\n        { label: 'Phone Number', name: 'phoneNumber', type: 'tel', isOptional: false },\n      ],\n    },\n    {\n      isAdjacent: false,\n      fields: [\n        {\n          label: 'Area Of Interest',\n          name: 'interest',\n          type: 'dropdown',\n          isOptional: false,\n          options: interests.map((option) => ({ label: option })),\n        },\n      ],\n    },\n    {\n      fields: [{ label: 'Message', name: 'message', type: 'textarea', isOptional: false }],\n    },\n    {\n      isAdjacent: false,\n      fields: [\n        {\n          label: 'Disclaimer',\n          name: 'disclaimer',\n          type: 'checkbox',\n          isOptional: false,\n          options: [\n            {\n              label:\n                'By ticking this box, I agree that Bayobab may contact me regarding my enquiry, in line with the Privacy Policy.',\n            },\n          ],\n        },\n      ],\n    },\n  ],\n  buttonLabel: 'Send Message',\n  buttonIcon: <Send />,\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  handleSubmit: (): void => {},\n};\n","export class SupportEmail {\n  name: string;\n  phoneNumber: string;\n  emailAddress: string;\n  company: string;\n  interest: string;\n  message: string;\n\n  constructor(data: SupportEmail) {\n    this.name = data.name;\n    this.phoneNumber = data.phoneNumber;\n    this.emailAddress = data.emailAddress;\n    this.company = data.company;\n    this.interest = data.interest;\n    this.message = data.message;\n  }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Success, Alert } from '@mtnkente/paragon-icons';\nimport { Modal } from '@mtnkente/paragon-overlays';\nimport React, { ReactElement } from 'react';\n\nexport const ConfirmationModal = ({ setOpenModal, error }: any): ReactElement => {\n  return (\n    <Modal\n      isOpen={true}\n      isDismissible\n      onOpenChange={(): void => {\n        setOpenModal(false);\n      }}\n      $variant={'feedback'}\n      icon={error ? <Alert /> : <Success />}\n      $status={error ? 'error' : 'success'}\n      title={error ? 'Unable to submit query' : 'Support query submitted'}\n      description={\n        error\n          ? 'We are currently unable to process your submission request. Please try to refresh the page in couple minutes.'\n          : \"We've received your request - a Bayobab representative will be in touch with you shortly to assist.\"\n      }\n    ></Modal>\n  );\n};\n","import React, { ReactElement, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { BannerContainer, MainContainer } from '../PeeringPolicy/PeeringPolicy.style';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport {\n  AccordionWrap,\n  FeatureAppContainer,\n} from '../../../authorization/whatsappBsp/SupportAndFaqs/SupportAndFaqs.style';\nimport { FeatureAppContainerFAQ } from '../../../authorization/converge/convergeSupportTicket/SupportTicket.styled';\nimport { Accordion, AccordionItem, Text } from '@mtnkente/paragon-display';\nimport { faqConfig } from './FaqConfig';\nimport { supportFormData } from './SupportFormConfig';\nimport { sendSupportEmail } from '../../../../apis/send-support-email';\nimport { CORRELATION_ID } from '../../../../utils/constants';\nimport { SupportEmail } from '../../../../models/support-email';\nimport { capitalizeAfterFullStop, capitalizeFirstLetter } from '../../../../utils/capitalise-text';\nimport { ConfirmationModal } from './ConfirmationModal';\n\nconst CustomerSupport: React.FC = (): ReactElement => {\n  const [hasError, setHasError] = useState<boolean>(false);\n  const [openModal, setOpenModal] = useState<boolean>(false);\n\n  const envs = {\n    banner: process.env.REACT_APP_FA_DYNAMIC_BANNER_URL ?? '',\n    supportForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n  const BannerData = {\n    state: 'IpBanner',\n    backgroundColor: 'blue',\n    label: 'Support',\n    title: 'Frequently Asked Questions',\n    bodyText: '',\n    backgroundImage: process.env.REACT_APP_ASSETS_URL + '_Pre-login/page-banner_bg.webp',\n  };\n\n  const formContent = {\n    ...supportFormData,\n    handleSubmit: (formData: any): void => {\n      formData.fullName = formData.name ? capitalizeFirstLetter(formData.name) : formData.name;\n      formData.company = formData.company\n        ? capitalizeFirstLetter(formData.company)\n        : formData.company;\n      formData.jobTitle = formData.emailAddress\n        ? capitalizeFirstLetter(formData.emailAddress)\n        : formData.emailAddress;\n      formData.jobTitle = formData.phoneNumber\n        ? capitalizeFirstLetter(formData.phoneNumber)\n        : formData.phoneNumber;\n      formData.interest = formData.interest\n        ? capitalizeFirstLetter(formData.interest)\n        : formData.interest;\n      formData.comment = formData.message\n        ? capitalizeAfterFullStop(formData.message)\n        : formData.message;\n\n      sendSupportEmail(CORRELATION_ID, new SupportEmail({ ...formData }))\n        .then(() => {\n          setHasError(false);\n          setOpenModal(true);\n        })\n        .catch((error) => {\n          setHasError(true);\n          console.error(error);\n          setOpenModal(true);\n        });\n    },\n  };\n\n  return (\n    <ThemeProvider mode={'light'} platform={'bayobab'}>\n      {!urls.banner || !urls.supportForm ? (\n        <Loading isLoading={true} />\n      ) : (\n        <>\n          <MainContainer>\n            <BannerContainer>\n              <FeatureAppLoader\n                featureAppId='fa-bayobab-customer-support-banner'\n                src={urls.banner}\n                moduleType=''\n                config={{\n                  bannerData: BannerData,\n                }}\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Customer Support Banner'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n              <FeatureAppContainer\n                style={{ maxWidth: '1040px', marginLeft: 'auto', marginRight: 'auto' }}\n              >\n                <FeatureAppContainerFAQ>\n                  <AccordionWrap>\n                    <Text $fontStyle={'title-small-bold'}>Bayobab Central FAQs</Text>\n                    {faqConfig.map((item, index) => (\n                      <Accordion key={index}>\n                        <AccordionItem title={item.title} value={`item-${index}`}>\n                          {item.content}\n                        </AccordionItem>\n                      </Accordion>\n                    ))}\n                  </AccordionWrap>\n                </FeatureAppContainerFAQ>\n              </FeatureAppContainer>\n              {openModal && <ConfirmationModal setOpenModal={setOpenModal} error={hasError} />}\n              <FeatureAppContainer\n                style={{ maxWidth: '1040px', marginLeft: 'auto', marginRight: 'auto' }}\n              >\n                <AccordionWrap>\n                  <FeatureAppLoader\n                    featureAppId='fa-customer-support-form'\n                    src={urls.supportForm}\n                    moduleType=''\n                    config={{ data: formContent, hasRecaptcha: true }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({\n                      error,\n                      featureAppNode,\n                      // loading,\n                    }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Customer Support Form'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </AccordionWrap>\n              </FeatureAppContainer>\n            </BannerContainer>\n          </MainContainer>\n\n          <BayobabFonts />\n        </>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default CustomerSupport;\n","import { LeadResponse } from '../models';\nimport apiClient from '../interceptors/auth-interceptor';\nimport { SupportEmail } from '../models/support-email';\n\nexport async function sendSupportEmail(\n  correlationId: string,\n  supportEmail: SupportEmail\n): Promise<LeadResponse> {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v2/sm-central-notifications`;\n\n  const response = await apiClient.post(url, supportEmail, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      notificationType: 'CustomerSupport',\n    },\n  });\n\n  return response.data;\n}\n","import styled, { DefaultTheme, css } from 'styled-components';\n\ninterface StatusTagProps {\n  colour: 'positive' | 'disabled';\n}\n\nexport const HeadingConatiner = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-none']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-2xsmall']};\n    align-self: stretch;\n  `}\n`;\n\nexport const HeadingWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n\n  @media (max-width: 768px) {\n    ${({ theme }): DefaultTheme => css`\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['padding-medium']};\n    `}\n  }\n`;\n\nexport const TableContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-xlarge']};\n    align-self: stretch;\n  `}\n`;\n\nexport const StatusTag = styled.div<StatusTagProps>`\n  ${({ theme: { colors, floats }, colour }): DefaultTheme => {\n    return css`\n      display: inline-flex;\n      padding: ${floats['padding-2xsmall']} ${floats['padding-small']};\n      align-items: center;\n      gap: ${floats['padding-2xsmall']};\n\n      border-radius: ${floats['corner-radius-medium']};\n      border: 1px solid\n        ${colour === 'positive'\n          ? colors['border-colour-success']\n          : colors['border-colour-opacity-lower-inverse']};\n      background: ${colour === 'positive'\n        ? colors['colour-surface-subtle-success']\n        : colors['colour-opacity-vibrant-inverse']};\n    `;\n  }}\n`;\n\nexport const StatusText = styled.p<StatusTagProps>`\n  ${({ theme: { colors, typography }, colour }): DefaultTheme => {\n    return css`\n      color: ${colour === 'positive'\n        ? colors['colour-success']\n        : colors['colour-opacity-high-inverse']};\n      ${typography['caption-regular']};\n\n      margin: 0;\n      padding: 0;\n    `;\n  }}\n`;\n\nexport const ButtonWrapper = styled.div`\n  @media (max-width: 768px) {\n    width: 100%;\n  }\n`;\nexport const FilterInputWrapper = styled.div`\n  display: flex;\n  padding: var(--padding-large, 24px);\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-medium, 16px);\n  align-self: stretch;\n  border-radius: var(--corner-radius-small, 16px);\n  border: 1px solid var(--border-colour-opacity-low-inverse, rgba(34, 45, 60, 0.16));\n  background: var(--colour-surface-full, #fff);\n`;\n\nexport const InputContainer = styled.div`\n  display: flex;\n  width: 100%;\n  gap: 16px;\n`;\n\nexport const InputWrapper = styled.div`\n  width: 100%;\n`;\n","import apiClient from '../interceptors/auth-interceptor';\n\nexport const getAllMessageAnalytics = async (\n  correlationId: string,\n  startDate: string,\n  endDate: string,\n  phoneNumber: string,\n  granularity: string = 'DAY' //'MONTH'\n): Promise<any> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-bayobab-conversion-api`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      token: sessionStorage.getItem('cToken'),\n      email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      wabaId: sessionStorage?.getItem('wId'),\n    },\n    params: {\n      fields: 'analytics',\n      start: startDate,\n      end: endDate,\n      phoneNumbers: phoneNumber !== '' ? phoneNumber : null,\n      granularity,\n    },\n  });\n  return response.data;\n};\nexport const getConversationAnalytics = async (\n  correlationId: string,\n  startDate: string,\n  endDate: string,\n  phoneNumbers: string,\n  granularity: string = 'DAILY' //'MONTHLY'\n): Promise<any> => {\n  const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-bayobab-conversion-api`;\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      token: sessionStorage.getItem('cToken'),\n      email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      wabaId: sessionStorage?.getItem('wId'),\n    },\n    params: {\n      fields: 'conversation_analytics',\n      start: startDate,\n      end: endDate,\n      granularity,\n      phoneNumbers: phoneNumbers !== '' ? phoneNumbers : null,\n      productTypes: '0, 2',\n      conversation_types: null,\n      conversationCategories: null,\n      dimensions: \"'CONVERSATION_CATEGORY', 'CONVERSATION_TYPE'\",\n    },\n  });\n  return response.data;\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport {\n  Logout,\n  UserSymbol,\n  UserGroup,\n  Marketplace,\n  LockOpen,\n  CustomerCare,\n  Chat,\n  MyProducts,\n  // News,\n  Send,\n  Services,\n  Notification,\n  // Travel,\n  ChevronDown,\n} from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport {\n  FilterInputWrapper,\n  HeadingConatiner,\n  HeadingWrapper,\n  InputContainer,\n  InputWrapper,\n  TableContainer,\n} from './Analytics.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\n// import { useNavigate } from 'react-router-dom';\nimport { DatePicker, TextInput, Dropdown } from '@mtnkente/paragon-inputs';\nimport { Menu } from '@mtnkente/paragon-overlays';\nimport { getActivePhoneNums } from '../../../../apis/get-overview-page-details';\nimport {\n  getAllMessageAnalytics,\n  getConversationAnalytics,\n} from '../../../../apis/get-message-analytics';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\ninterface AnalyticsProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\ninterface MenuItem {\n  label: string;\n  value: string;\n}\n\ntype DataPoint = {\n  start: number;\n  end: number;\n  conversation: number;\n  conversation_type: string;\n  conversation_category: string;\n  cost: number;\n};\n\ntype Totals = {\n  title: string;\n  cards: {\n    title: string;\n    icon: JSX.Element;\n    data: number;\n  }[];\n};\nconst formatDateLocal = (input: Date | string): string => {\n  const date = new Date(input);\n  const y = date.getFullYear();\n  const m = String(date.getMonth() + 1).padStart(2, '0');\n  const d = String(date.getDate()).padStart(2, '0');\n  return `${y}-${m}-${d}`;\n};\n\nexport const Analytics = ({ profile, isSupueruser, logoutF }: AnalyticsProps): ReactElement => {\n  const { user } = useAuth0();\n\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [isDataLoading, setIsDataLoading] = useState<boolean>(true);\n  // const navigate = useNavigate();\n  const todayDate = formatDateLocal(new Date());\n  const [startDate, setStartDate] = useState<string>('2025-01-01');\n  const [endDate, setEndDate] = useState<string>(todayDate);\n  const [isOpenStartDate, setIsOpenStartDate] = useState<boolean>(false);\n  const [isOpenEndDate, setIsOpenEndDate] = useState<boolean>(false);\n  const [triggerFilter, setTriggerFilter] = useState<boolean>(false);\n  const [cardData, setCardData] = useState<any>(null);\n  const correlationId = CORRELATION_ID;\n\n  const [phoneNumber, setPhoneNumber] = useState<string>('');\n  const [activePhoneNums, setActivePhoneNums] = useState<MenuItem[]>([]);\n\n  const categoryConfig: Record<string, { title: string; icon: JSX.Element }> = {\n    MARKETING: { title: 'Marketing', icon: <Marketplace /> },\n    UTILITY: { title: 'Utility', icon: <Notification /> },\n    AUTH: { title: 'Authentication', icon: <LockOpen /> },\n    AUTH_INTL: { title: 'Authentication - international', icon: <LockOpen /> },\n    SERVICE: { title: 'Service', icon: <Services /> },\n    MARKETING_MM_LITE: { title: 'Marketing MM Lite', icon: <LockOpen /> },\n    FREE_CUSTOMER: { title: 'Free customer service', icon: <CustomerCare /> },\n    FREE_ENTRY: { title: 'Free entry point', icon: <MyProducts /> },\n  };\n\n  const [isOpen, setIsOpen] = React.useState<boolean>(false);\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n    const fetchData = async (): Promise<void> => {\n      try {\n        await fetchAnalyticsData();\n        const activePhoneRes = await getActivePhoneNums(CORRELATION_ID);\n\n        if (activePhoneRes?.code === '200') {\n          const phoneNumbers = activePhoneRes.data.map((item) => ({\n            label: item?.fullName,\n            value: item?.display_phone_number,\n          }));\n          setActivePhoneNums(phoneNumbers);\n        }\n      } catch (err) {\n        console.error('Error fetching:', err);\n      }\n    };\n    fetchData()\n      .then(() => {})\n      .catch((err) => {\n        console.error('Error in fetchData:', err);\n      });\n    fetchNotifications();\n  }, []);\n\n  const fetchAnalyticsData = async (): Promise<void> => {\n    try {\n      setIsDataLoading(true);\n      const [allMessageRes, conversationRes] = await Promise.all([\n        getAllMessageAnalytics(CORRELATION_ID, startDate, endDate, phoneNumber),\n        getConversationAnalytics(CORRELATION_ID, startDate, endDate, phoneNumber),\n      ]);\n      let finalResult: any[] = [];\n      if (allMessageRes?.code === '200') {\n        const dataPoints = allMessageRes?.data?.analytics?.data_points ?? [];\n        const transformed = processAllMessages(dataPoints);\n        finalResult = transformed;\n      }\n\n      if (conversationRes?.code === '200') {\n        const dataPoints =\n          conversationRes?.data?.conversation_analytics?.data[0]?.data_points ?? [];\n        if (dataPoints?.length !== 0) {\n          const transformed = transformDeliveryData(dataPoints);\n          finalResult = [finalResult, ...transformed];\n        } else {\n          finalResult = [finalResult];\n        }\n      }\n      setCardData(finalResult);\n      setIsDataLoading(false);\n    } catch (err) {\n      console.error('Error fetching analytics data:', err);\n    }\n  };\n\n  useEffect(() => {\n    if (triggerFilter) {\n      fetchAnalyticsData()\n        .then(() => {})\n        .catch((err) => {\n          console.error('Error in fetchAnalyticsData:', err);\n        });\n      setTriggerFilter(false);\n    }\n  }, [triggerFilter, cardData, isDataLoading]);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    metricCards: process.env.REACT_APP_FA_PRODUCT_CARDS_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Analytics',\n      title: 'Post Login',\n      backIcon: true,\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const transformDeliveryData = (dataPoints: DataPoint[]): Record<string, any>[] => {\n    const grouped = dataPoints.reduce<Record<string, Record<string, number>>>(\n      (acc, { conversation_type, conversation_category, conversation }) => {\n        if (!acc[conversation_type]) acc[conversation_type] = {};\n        acc[conversation_type][conversation_category] =\n          (acc[conversation_type][conversation_category] || 0) + conversation;\n        return acc;\n      },\n      {}\n    );\n\n    const allTotal = Object.values(grouped)\n      .flatMap(Object.values)\n      .reduce((a, b) => a + b, 0);\n\n    const freeTotal = Object.values(grouped['FREE_TIER'] || {}).reduce((a, b) => a + b, 0);\n\n    const paidTotal = allTotal - freeTotal;\n\n    const result: Record<string, any>[] = [];\n\n    if (allTotal > 0) {\n      result.push({\n        title: `All conversation delivered ${allTotal.toLocaleString()}`,\n        cards: makeCards({\n          ...(grouped.REGULAR || {}),\n          ...(grouped.FREE_TIER || {}),\n        }),\n      });\n    }\n\n    if (freeTotal > 0) {\n      result.push({\n        title: `Free conversation delivered ${freeTotal.toLocaleString()}`,\n        cards: makeCards(grouped.FREE_TIER),\n      });\n    }\n\n    if (paidTotal > 0) {\n      result.push({\n        title: `Paid conversation delivered ${paidTotal.toLocaleString()}`,\n        cards: makeCards(grouped.REGULAR),\n      });\n    }\n\n    return result;\n  };\n\n  const makeCards = (categories: Record<string, number> = {}): {} =>\n    Object.entries(categories).map(([category, total]) => {\n      const config = categoryConfig[category] || {\n        title: category,\n        icon: <Chat />,\n      };\n      return {\n        ...config,\n        data: total,\n      };\n    });\n  const processAllMessages = (allMessageRes: any): Totals => {\n    const dataPoints = allMessageRes;\n\n    const totals = dataPoints.reduce(\n      (acc: DataPoint, curr: any) => {\n        acc.sent += curr.sent ?? 0;\n        acc.delivered += curr.delivered ?? 0;\n        return acc;\n      },\n      { sent: 0, delivered: 0 }\n    );\n\n    return {\n      title: `All messages `,\n      cards: [\n        {\n          title: 'Messages sent',\n          icon: <Chat />,\n          data: totals.sent,\n        },\n        {\n          title: 'Messages delivered',\n          icon: <Send />,\n          data: totals.delivered,\n        },\n        // {\n        //   title: \"Message received\",\n        //   icon: <News />,\n        //   data: totals.read,\n        // },\n      ],\n    };\n  };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-services'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Services Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      Analytics Insights\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      View message performance by status and category.\n                    </Text>\n                  </HeadingConatiner>\n                  {/* <div style={{ display: 'flex', gap: '12px' }}>\n                    <StandardButton\n                      icon={<PlusWithCircle />}\n                      $variant='secondary'\n                      label='New Campaign'\n                      onClick={() =>\n                        navigate(\n                          '/whatsapp-business-messaging/campaign-management/create-new-campaign'\n                        )\n                      }\n                    />\n                    <StandardButton\n                      icon={<PlusWithCircle />}\n                      label='New Template'\n                      onClick={() =>\n                        navigate('/whatsapp-business-messaging/message-templates/create-template')\n                      }\n                    />\n                  </div> */}\n                </HeadingWrapper>\n                <FilterInputWrapper>\n                  <Text $colour='subtle' $fontStyle='body-small-regular'>\n                    Apply filters by date range and phone number to customise your report.\n                  </Text>\n                  <InputContainer>\n                    <InputWrapper>\n                      <DatePicker\n                        $variant={'elevated'}\n                        isOpen={isOpenStartDate}\n                        $hasMonthSelection={true}\n                        datePickerConfig={{\n                          minDate: new Date('2025-01-01T21:24:27.931Z'),\n                        }}\n                        onDateChange={(value: Date | null | {}) => {\n                          const formattedDate = formatDateLocal(value as Date);\n                          setStartDate(formattedDate);\n                          setIsOpenStartDate(false);\n                        }}\n                        $hasRangeSelection={false}\n                      >\n                        <TextInput\n                          $inputIcon={<ChevronDown />}\n                          inputIconOnClick={() => setIsOpenStartDate(!isOpenStartDate)}\n                          inputMode='text'\n                          label={'Start Date'}\n                          placeholder='Start Date'\n                          type='text'\n                          value={startDate && startDate}\n                          disabled={false}\n                          onClick={() => setIsOpenStartDate(!isOpenStartDate)}\n                        />\n                      </DatePicker>\n                    </InputWrapper>\n                    <InputWrapper>\n                      <DatePicker\n                        $variant={'elevated'}\n                        isOpen={isOpenEndDate}\n                        $hasMonthSelection={true}\n                        datePickerConfig={{\n                          maxDate: new Date(),\n                        }}\n                        onDateChange={(value: Date | null | {}) => {\n                          const formattedDate = formatDateLocal(value as Date);\n                          setEndDate(formattedDate);\n                          setIsOpenEndDate(false);\n                        }}\n                        $hasRangeSelection={false}\n                      >\n                        <TextInput\n                          $inputIcon={<ChevronDown />}\n                          inputIconOnClick={() => setIsOpenEndDate(!isOpenEndDate)}\n                          inputMode='text'\n                          label={'End Date'}\n                          placeholder='End Date'\n                          type='text'\n                          value={endDate && endDate}\n                          disabled={false}\n                          onClick={() => setIsOpenEndDate(!isOpenEndDate)}\n                        />\n                      </DatePicker>\n                    </InputWrapper>\n                    <InputWrapper>\n                      <Menu\n                        hasSearch={false}\n                        isOpen={isOpen}\n                        isCountryList={false}\n                        items={activePhoneNums}\n                        selectedItem={phoneNumber}\n                        isAttached\n                        onItemSelect={(e) => {\n                          const sanitizedNumber = e.split('+')[1].replace(/\\s+/g, '');\n                          setPhoneNumber(sanitizedNumber);\n                          setIsOpen(!isOpen);\n                        }}\n                        onOpenChange={() => setIsOpen(!isOpen)}\n                        variant='elevated'\n                      >\n                        <Dropdown\n                          selectedItem={phoneNumber}\n                          label='Phone Number'\n                          $setIsOpen={setIsOpen}\n                        />\n                      </Menu>\n                    </InputWrapper>\n                    <StandardButton\n                      data-testid='button'\n                      $variant='call-out'\n                      label='Apply'\n                      onClick={() => {\n                        setTriggerFilter(!triggerFilter);\n                      }}\n                    />\n                  </InputContainer>\n                </FilterInputWrapper>\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n          {cardData?.length > 0 && !isDataLoading ? (\n            <FeatureAppLoader\n              featureAppId='fa-analytics-metric-cards'\n              src={urls.metricCards}\n              moduleType=''\n              config={{ isAnalyticsMetricData: true, data: cardData }} //analyticsData\n              onError={(error: unknown): unknown => error}\n            >\n              {({\n                error,\n                featureAppNode,\n                // loading,\n              }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Converge Metric Card'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n          ) : (\n            <>\n              <Loading isLoading={true} />\n            </>\n          )}\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const Wrapper = styled.div`\n  position: fixed;\n  bottom: 20px;\n  right: 20px;\n  z-index: 999;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n`;\n\nexport const FloatingButton = styled.button<{ $expanded: boolean }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: rgba(34, 45, 60, 0.8);\n  color: #fff;\n  border: none;\n  border-radius: 50%;\n  width: 50px;\n  height: 50px;\n  cursor: pointer;\n  transition: all 0.3s ease;\n  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);\n  overflow: hidden;\n  position: relative;\n  padding: 0 16px;\n\n  svg {\n    fill: #fff;\n    color: #fff;\n  }\n\n  span {\n    display: none;\n    opacity: 0;\n    margin-left: 8px;\n    white-space: nowrap;\n    transition: opacity 0.3s ease;\n  }\n\n  ${({ $expanded }): any =>\n    $expanded\n      ? css`\n          border-radius: 30px;\n          width: 250px;\n          justify-content: flex-start;\n          padding-left: 12px;\n\n          span {\n            opacity: 1;\n            display: inline-block;\n          }\n        `\n      : css`\n          &:hover {\n            border-radius: 30px;\n            width: 250px;\n            justify-content: flex-start;\n            padding-left: 12px;\n\n            span {\n              opacity: 1;\n              display: inline-block;\n            }\n          }\n        `}\n`;\n\nexport const OptionsPanel = styled.div`\n  position: absolute;\n  bottom: 60px;\n  right: 0;\n  background: none;\n  border-radius: 10px;\n  padding: 10px 0;\n  width: 230px;\n  display: flex;\n  align-items: flex-end;\n  text-align: right;\n  flex-direction: column;\n  animation: fadeIn 0.3s ease forwards;\n\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n      transform: translateY(5px);\n    }\n    to {\n      opacity: 1;\n      transform: translateY(0);\n    }\n  }\n`;\n\nexport const OptionItem = styled.button`\n  ${(): any => {\n    return css`\n      display: flex;\n      padding: 12px 16px;\n      gap: 1px;\n      border-radius: 100px;\n      border: none;\n      background: #e2e2d9;\n      margin: 10px;\n      cursor: pointer;\n      box-shadow: 0 8px 2px rgba(0, 0, 0, 0.01);\n      &:hover {\n        background-color: #d9d9d0;\n      }\n    `;\n  }}\n`;\nexport const OptionClose = styled.button`\n  ${(): any => {\n    return css`\n      display: flex;\n      padding: 12px 16px;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      gap: 1px;\n      width: 48px;\n      height: 48px;\n      border-radius: 100px;\n      border: none;\n      background: #e2e2d9;\n      margin: 10px;\n      cursor: pointer;\n      box-shadow: 0 8px 2px rgba(0, 0, 0, 0.01);\n      &:hover {\n        background-color: #d9d9d0;\n      }\n    `;\n  }}\n`;\nexport const ButtonText = styled.p`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour-inverse']};\n      ${typography['label-small-bold']};\n    `;\n  }}\n`;\n\nexport const ProductContainer = styled.div`\n  ${({ theme: { floats } }): DefaultTheme => {\n    return css`\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${floats['margin-medium']};\n      align-self: stretch;\n      padding-top: 32px;\n    `;\n  }}\n`;\n","import apiClient from '../interceptors/auth-interceptor';\nimport { CORRELATION_ID } from '../utils';\n\nexport interface FeedbackPayload {\n  feedbackType: string;\n  portalProductType: string;\n  rating: string;\n  difficulties: string;\n  recommendation: string;\n  productLike: string;\n  comment: string;\n  contactMe: boolean;\n}\n\nexport interface FeedbackResponse {\n  transactionId?: string;\n  serviceId?: string;\n  correlationId?: string;\n  code?: string;\n  timestamp?: string;\n  message?: string | object;\n  status?: number;\n}\n\nexport async function SubmitFeedback(feedback: FeedbackPayload): Promise<FeedbackResponse> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-central-provide-feedback-logs`;\n\n  const response = await apiClient.post(url, feedback, {\n    headers: {\n      'Content-Type': 'application/json',\n      userEmail: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n      correlationId: CORRELATION_ID,\n    },\n  });\n\n  return response.data;\n}\n","import { SubmitFeedback } from '../../../../apis/provide-feedback';\nimport { FeedbackFormParams, formTypes } from '../../../../types/feedback-forms.types';\n\nexport const forms: formTypes = {\n  'General feedback': {\n    // buttonStatus: true,\n    buttonLabel: 'Send feedback',\n    formSections: [\n      {\n        title: 'Is there anything you feel we could do better?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [\n          {\n            label: 'Please Tell Us More',\n            name: 'suggestions',\n            type: 'textarea',\n            isOptional: false,\n          },\n        ],\n      },\n      {\n        title: 'Do you have any other comments or suggestions?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [\n          { label: 'Please Tell Us More', name: 'comments', type: 'textarea', isOptional: true },\n        ],\n      },\n      {\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contactMe',\n            type: 'checkbox',\n            isOptional: true,\n            disclaimer:\n              'We’ll use your feedback to improve our products. Please don’t include personal or confidential details. For technical issues, kindly raise a support ticket instead.',\n            options: [\n              {\n                label: 'You may contact me about this feedback',\n              },\n            ],\n          },\n        ],\n      },\n    ],\n    /* eslint-disable @typescript-eslint/no-misused-promises */\n    handleSubmit: async (\n      formData: any,\n      { onSuccess, onError }: FeedbackFormParams\n    ): Promise<void> => {\n      try {\n        const hasContactMe = 'contactMe' in formData;\n        const feedbackPayload = {\n          feedbackType: 'General feedback',\n          portalProductType: '',\n          rating: '',\n          difficulties: '',\n          phoneNumber: JSON.parse(Object(sessionStorage.getItem('profile')))?.contactNumber,\n          recommendation: formData.suggestions,\n          productLike: '',\n          comment: formData.comments,\n          contactMe: hasContactMe,\n        };\n\n        await SubmitFeedback(feedbackPayload);\n        onSuccess();\n      } catch (error) {\n        console.error('❌ Failed to submit feedback:', error);\n        onError();\n      }\n    },\n  },\n  'Portal feedback': {\n    buttonLabel: 'Send feedback',\n    formSections: [\n      {\n        title: 'How easy is it to navigate the Customer Portal?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [{ label: 'Rating', name: 'rating', type: 'rating', isOptional: false }],\n      },\n      {\n        fields: [\n          {\n            label: 'Did you experience any difficulties while using the Customer Portal?',\n            name: 'anyDifficulties',\n            type: 'radio',\n            isOptional: false,\n            options: [\n              { label: 'Yes', value: 'Yes' },\n              { label: 'No', value: 'No' },\n            ],\n          },\n        ],\n      },\n      {\n        title: 'What would make the Customer Portal easier to use?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [\n          { label: 'Please Tell Us More', name: 'suggestions', type: 'textarea', isOptional: true },\n        ],\n      },\n      {\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contactMe',\n            type: 'checkbox',\n            isOptional: true,\n            disclaimer:\n              'We’ll use your feedback to improve our products. Please don’t include personal or confidential details. For technical issues, kindly raise a support ticket instead.',\n            options: [\n              {\n                label: 'You may contact me about this feedback',\n              },\n            ],\n          },\n        ],\n      },\n    ],\n    /* eslint-disable @typescript-eslint/no-misused-promises */\n    handleSubmit: async (\n      formData: any,\n      { onSuccess, onError }: FeedbackFormParams\n    ): Promise<void> => {\n      try {\n        const hasContactMe = 'contactMe' in formData;\n        const feedbackPayload = {\n          feedbackType: 'Portal experience',\n          portalProductType: '',\n          rating: formData.rating,\n          difficulties: formData.anyDifficulties,\n          recommendation: formData.suggestions,\n          phoneNumber: JSON.parse(Object(sessionStorage.getItem('profile')))?.contactNumber,\n          productLike: '',\n          comment: '',\n          contactMe: hasContactMe,\n        };\n\n        await SubmitFeedback(feedbackPayload);\n        onSuccess();\n      } catch (error) {\n        console.error('❌ Failed to submit feedback:', error);\n        onError();\n      }\n    },\n  },\n  'Product feedback': {\n    // buttonStatus: true,\n    buttonLabel: 'Send feedback',\n    formSections: [\n      {\n        title: 'How would you rate your experience with this product?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [{ label: 'Rating', name: 'rating', type: 'rating', isOptional: false }],\n      },\n      {\n        title: 'What do you like most about this product?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [\n          { label: 'Please Tell Us More', name: 'likeMost', type: 'textarea', isOptional: true },\n        ],\n      },\n      {\n        title: 'Anything you wish to improve about this product?',\n        isAdjacent: false,\n        isMobileAdjacent: false,\n        fields: [\n          { label: 'Please Tell Us More', name: 'suggestions', type: 'textarea', isOptional: true },\n        ],\n      },\n      {\n        isAdjacent: false,\n        fields: [\n          {\n            name: 'contactMe',\n            type: 'checkbox',\n            isOptional: true,\n            disclaimer:\n              'We’ll use your feedback to improve our products. Please don’t include personal or confidential details. For technical issues, kindly raise a support ticket instead.',\n            options: [{ label: 'You may contact me about this feedback' }],\n          },\n        ],\n      },\n    ],\n    /* eslint-disable @typescript-eslint/no-misused-promises */\n    handleSubmit: async (\n      formData: any,\n      { onSuccess, onError }: FeedbackFormParams\n    ): Promise<void> => {\n      try {\n        const hasContactMe = 'contactMe' in formData;\n        const feedbackPayload = {\n          feedbackType: 'Product feedback',\n          portalProductType: localStorage.getItem('productTitle') ?? '',\n          rating: formData.rating,\n          phoneNumber: JSON.parse(Object(sessionStorage.getItem('profile')))?.contactNumber,\n          difficulties: '',\n          recommendation: formData.suggestions,\n          productLike: formData.likeMost,\n          comment: '',\n          contactMe: hasContactMe,\n        };\n        await SubmitFeedback(feedbackPayload);\n        onSuccess();\n      } catch (error) {\n        console.error('❌ Failed to submit feedback:', error);\n        onError();\n      }\n    },\n  },\n};\n","import React from 'react';\n\nconst SidePanelIcon = (): JSX.Element => (\n  <svg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 36 36' fill='none'>\n    <path\n      d='M4.79219 31.4994H31.2078C34.3976 31.4994 36 29.9745 36 26.9535V9.04589C36 6.02489 34.3976 4.5 31.2078 4.5H4.79219C1.61801 4.50063 0 6.01112 0 9.04589V26.9541C0 29.9895 1.61801 31.4994 4.79219 31.4994ZM4.83776 29.1391C3.31156 29.1391 2.4573 28.362 2.4573 26.8365V9.16477C2.4573 7.63926 3.31156 6.86211 4.83776 6.86211H11.6289V29.1391H4.83776ZM31.1622 6.86211C32.6728 6.86211 33.5427 7.63926 33.5427 9.16477V26.8352C33.5427 28.3607 32.6728 29.1379 31.1622 29.1379H14.025V6.86148L31.1622 6.86211ZM8.69886 12.3034C9.15659 12.3034 9.56875 11.9073 9.56875 11.4818C9.56875 11.0419 9.15659 10.6609 8.69886 10.6609H5.41725C4.96017 10.6609 4.56299 11.0419 4.56299 11.4818C4.56299 11.9073 4.96017 12.3034 5.41791 12.3034H8.69886ZM8.69886 16.1016C9.15659 16.1016 9.56875 15.7055 9.56875 15.2656C9.56875 14.8257 9.15659 14.4584 8.69886 14.4584H5.41725C4.96017 14.4584 4.56299 14.8257 4.56299 15.2656C4.56299 15.7055 4.96017 16.1016 5.41791 16.1016H8.69886ZM8.69886 19.8853C9.15659 19.8853 9.56875 19.5186 9.56875 19.0781C9.56875 18.6389 9.15659 18.2572 8.69886 18.2572H5.41725C4.96017 18.2572 4.56299 18.6389 4.56299 19.0787C4.56299 19.5186 4.96017 19.8853 5.41791 19.8853H8.69886Z'\n      fill='#344052'\n    />\n  </svg>\n);\n\nexport default SidePanelIcon;\n","import React from 'react';\nimport { Document, MyProducts, TalkFree } from '@mtnkente/paragon-icons';\nimport { FeedbackTypes, PortalProducts } from '../../../../types/feedback-forms.types';\nimport SidePanelIcon from '../../../../assets/icons/SidePanelIcon';\n\nexport interface ProductConfigItem {\n  id: string;\n  title: PortalProducts | FeedbackTypes;\n  description: string;\n  image: string;\n  icon?: React.ReactNode;\n  download?: boolean;\n  helpCentreOptions?: helpCentreConfigItem[];\n}\n\nexport interface helpCentreConfigItem {\n  id: string;\n  title: string;\n  description: string;\n  label: string;\n  link: string;\n  image?: string;\n}\n\nexport const productConfig: ProductConfigItem[] = [\n  {\n    id: 'converge',\n    title: 'Converge',\n    description: 'Platform',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/converge.webp',\n  },\n  {\n    id: 'whatsapp-bm',\n    title: 'WhatsApp BM',\n    description: 'Platform',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/whatsapp-bm.webp',\n  },\n  {\n    id: 'ipx-analytics',\n    title: 'IPX Analytics',\n    description: 'Platform',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/ipx.webp',\n  },\n  {\n    id: 'peering-info',\n    title: 'Peering Information',\n    description: 'Tool',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/peering.webp',\n  },\n  {\n    id: 'looking-glass',\n    title: 'Looking Glass',\n    description: 'Tool',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/looking-glass.webp',\n  },\n];\n\nexport const convergeHelpCentreCardConfigs: helpCentreConfigItem[] = [\n  {\n    id: 'faq',\n    title: 'FAQs',\n    description: 'Find quick answers to common questions about using the Customer Portal.',\n    label: 'View all FAQs',\n    link: '',\n  },\n  // {\n  //   id: 'documents',\n  //   title: 'Documents & Manuals',\n  //   description: 'Access detailed user manuals, setup guides, and downloadable resources.',\n  //   label: 'Explore documents',\n  //   link: '',\n  // },\n  // {\n  //   id: 'videos',\n  //   title: 'Videos',\n  //   description: 'Watch short walkthroughs and demos to learn how to use key features.',\n  //   label: 'Watch videos',\n  //   link: '',\n  // },\n];\n\nexport const helpCentreCardConfigs: helpCentreConfigItem[] = [\n  {\n    id: 'faq',\n    title: 'FAQs',\n    description: 'Find quick answers to common questions about using the Customer Portal.',\n    label: 'View all FAQs',\n    link: '',\n  },\n  // {\n  //   id: 'documents',\n  //   title: 'Documents & Manuals',\n  //   description: 'Access detailed user manuals, setup guides, and downloadable resources.',\n  //   label: 'Explore documents',\n  //   link: '',\n  // },\n  // {\n  //   id: 'videos',\n  //   title: 'Videos',\n  //   description: 'Watch short walkthroughs and demos to learn how to use key features.',\n  //   label: 'Watch videos',\n  //   link: '',\n  // },\n];\n\nexport const helpCentreConfig: ProductConfigItem[] = [\n  // {\n  //   id: 'customerPortal',\n  //   title: 'Customer Portal',\n  //   description: 'Portal',\n  //   image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/peering.webp',\n  //   helpCentreOptions: helpCentreCardConfigs,\n  // },\n  {\n    id: 'converge',\n    title: 'Converge',\n    description: 'Platform',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/converge.webp',\n    helpCentreOptions: convergeHelpCentreCardConfigs,\n  },\n  {\n    id: 'whatsapp-bm',\n    title: 'WhatsApp BM',\n    description: 'Platform',\n    image: process.env.REACT_APP_ASSETS_URL + 'Feedback/products/whatsapp-bm.webp',\n    helpCentreOptions: helpCentreCardConfigs,\n  },\n];\n\nexport const feedbackTypeConfig: ProductConfigItem[] = [\n  {\n    id: 'general',\n    title: 'General feedback',\n    description: '',\n    image: '',\n    icon: <TalkFree />,\n  },\n  {\n    id: 'product',\n    title: 'Product feedback',\n    description: '',\n    image: '',\n    icon: <MyProducts />,\n  },\n  {\n    id: 'portal',\n    title: 'Portal feedback',\n    description: '',\n    image: '',\n    icon: <SidePanelIcon />,\n  },\n];\n\nexport const DocumentTypeConfig = [\n  {\n    id: 'general',\n    title: 'Service reports',\n    description: '',\n    image: '',\n    icon: <Document />,\n  },\n  {\n    id: 'product',\n    title: 'Product feedback',\n    description: '',\n    image: '',\n    icon: <Document />,\n  },\n  {\n    id: 'portal',\n    title: 'Portal feedback',\n    description: '',\n    image: '',\n    icon: <Document />,\n  },\n];\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Card = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    width: 100%;\n    padding: ${theme.floats['padding-medium']};\n    align-items: center;\n    gap: ${theme.floats['margin-small']};\n\n    border-radius: ${theme.floats['corner-radius-small']};\n\n    border: ${theme.floats['border-weight-small']} solid\n      ${theme.colors['border-colour-opacity-low-inverse']};\n\n    background: ${theme.colors['colour-on-secondary'] || '#fff'};\n\n    cursor: pointer;\n  `}\n`;\n\nexport const Content = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    align-items: center;\n    gap: ${theme.floats['padding-medium']};\n    flex: 1 0 0;\n  `}\n`;\n\nexport const CheckboxContainer = styled.div`\n  display: flex;\n  width: 24px;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n  flex-shrink: 0;\n\n  svg {\n    width: 24px;\n    height: 24px;\n    aspect-ratio: 1/1;\n  }\n`;\n\nexport const TextContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-none']} 0 0 0;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-2xsmall']};\n    flex: 1 0 0;\n  `}\n`;\n\nexport const TitleAndDescription = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-xsmall']};\n    align-self: stretch;\n  `}\n`;\n\nexport const HelperText = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-xsmall']};\n    align-self: stretch;\n\n    color: ${theme.colors['colour-opacity-medium-inverse']};\n    ${theme.typography['body-small-italics']};\n  `}\n`;\n\nexport const Description = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    align-items: flex-start;\n    gap: 10px;\n    align-self: stretch;\n\n    color: ${theme.colors['text-embed-text-colour-tertiary']};\n    ${theme.typography['body-small-regular']};\n  `}\n`;\n\nexport const Title = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 10px;\n    align-self: stretch;\n\n    color: ${theme.colors['text-embed-text-colour']};\n    ${theme.typography['label-small-bold']};\n  `}\n`;\n\nexport const StyledImage = styled.img`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    width: 36px;\n    height: 36px;\n    justify-content: center;\n    align-items: center;\n    gap: 10px;\n    aspect-ratio: 1/1;\n    border-radius: ${theme.floats['corner-radius-xsmall']};\n  `}\n`;\n","/* eslint-disable  @typescript-eslint/no-floating-promises */\nimport React from 'react';\nimport {\n  Card,\n  CheckboxContainer,\n  Content,\n  StyledImage,\n  TextContainer,\n  Title,\n  TitleAndDescription,\n} from './SelectCards.styled';\nimport { SelectCardProps } from '../../../../types/feedback-forms.types';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Arrow, Download } from '@mtnkente/paragon-icons';\nimport { IconButton } from '@mtnkente/paragon-buttons';\n\nconst SelectCard = ({\n  title,\n  description,\n  onClick,\n  onDownloadClick,\n  value,\n  image,\n  icon,\n  download,\n}: SelectCardProps): JSX.Element => {\n  return (\n    <Card\n      onClick={!download ? (): void | undefined => onClick?.(value) : undefined}\n      style={{\n        cursor: download ? 'default' : 'pointer',\n      }}\n    >\n      <Content>\n        {image ? (\n          <StyledImage src={image} />\n        ) : (\n          React.cloneElement(icon as React.ReactElement, {\n            width: 32,\n            height: 32,\n          })\n        )}\n\n        <TextContainer>\n          <TitleAndDescription>\n            <Title>{title}</Title>\n            <Text $fontStyle='caption-regular'>{description}</Text>\n          </TitleAndDescription>\n        </TextContainer>\n      </Content>\n\n      {download ? (\n        <IconButton\n          $icon={<Download />}\n          onClick={(e) => {\n            e.stopPropagation();\n            onDownloadClick?.(value);\n          }}\n        />\n      ) : (\n        <CheckboxContainer>\n          <Arrow />\n        </CheckboxContainer>\n      )}\n    </Card>\n  );\n};\n\nexport default SelectCard;\n","import styled from 'styled-components';\n\nexport const MainContent = styled.div`\n  display: flex;\n  width: 30rem;\n  height: 54.3125rem;\n  padding: var(--padding-none, 0);\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--padding-3xlarge, 3rem);\n  position: absolute;\n  right: 0;\n  bottom: 0.125rem;\n  border-radius: var(--corner-radius-small, 1rem) 0 0 var(--corner-radius-small, 1rem);\n  background: var(--sheet-side-elevated-container-colour, #fff);\n\n  /* shadow/left */\n  box-shadow: var(--shadow-left-x, -4px) 0 var(--shadow-left-blur, 16px)\n    var(--shadow-left-spread, 2px) var(--shadow-left-colour, rgba(0, 0, 0, 0.08));\n`;\n\nexport const DetailsContainer = styled.div`\n  display: flex;\n  height: 90vh;\n  flex-direction: column;\n  justify-content: space-between;\n  align-items: flex-start;\n  flex: 1 0 0;\n  align-self: stretch;\n  padding: 2rem 0;\n`;\n","import React from 'react';\nimport { DetailsContainer } from './LogATicket.styled';\nimport { AspectRatio, Text } from '@mtnkente/paragon-display';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { NewTab } from '@mtnkente/paragon-icons';\n\nexport default function LogATicketComponent(): JSX.Element {\n  const handleButtonClick = (): void => {\n    window.open(`${process.env.REACT_APP_LOG_SUPPORT_URL}`, '_blank');\n  };\n\n  return (\n    <>\n      <Text $fontStyle={'caption-regular'}>\n        Need help with something specific? Simply provide details about your issue and our dedicated\n        team will assist you as soon as possible.\n      </Text>\n      <DetailsContainer>\n        <AspectRatio\n          $cornerRadius='medium'\n          $ratio={'4:3'}\n          alt={'log a ticket image'}\n          src={`${process.env.REACT_APP_ASSETS_URL}Support-Ticket/log-support-ticket.webp`}\n        />\n        <StandardButton\n          label={'Log A Ticket'}\n          $variant='primary'\n          icon={<NewTab />}\n          onClick={handleButtonClick}\n        />\n      </DetailsContainer>\n    </>\n  );\n}\n","import styled from 'styled-components';\n\nexport const CardContainer = styled.div`\n  display: flex;\n  padding: var(--padding-large, 1.5rem);\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-small, 0.75rem);\n  align-self: stretch;\n  border-radius: var(--corner-radius-small, 1rem);\n  border: 1px solid var(--border-colour-opacity-low-inverse, rgba(34, 45, 60, 0.16));\n  background: var(--colour-opacity-lowest-inverse, rgba(34, 45, 60, 0.04));\n`;\n\nexport const ResultsWrapper = styled.div`\n  display: flex;\n  padding: var(--padding-4xlarge, 4rem) var(--search-suggestion-container-padding-left-right, 1rem);\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  height: 80vh;\n  gap: var(--search-suggestion-content-margin, 1rem);\n  flex: 1 0 0;\n  align-self: stretch;\n  border-radius: var(--corner-radius-small, 1rem);\n  border: 1px solid var(--border-colour-opacity-low-inverse, rgba(34, 45, 60, 0.16));\n  background: var(--colour-opacity-lowest-inverse, rgba(34, 45, 60, 0.04));\n`;\n\nexport const ContentConstruct = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: var(--margin-medium, 1rem);\n  align-self: stretch;\n  text-align: center;\n`;\n","import React from 'react';\nimport { Text } from '@mtnkente/paragon-display';\nimport { CardContainer } from './HelpCentre.styled';\n\ntype HelpCentreProps = {\n  title: string;\n  description: string;\n  label: string;\n  link?: string;\n  value?: string;\n  onClick: (ar: any) => void;\n};\nexport default function HelpCentreComponent({\n  title,\n  description,\n  label,\n  onClick,\n}: HelpCentreProps): JSX.Element {\n  return (\n    <CardContainer>\n      <Text $fontStyle={'label-small-bold'}>{title}</Text>\n      <Text $fontStyle={'caption-regular'}>{description}</Text>\n      <Text\n        onClick={(e) => onClick(e)}\n        style={{\n          textDecoration: 'underline',\n          cursor: 'pointer',\n        }}\n        $fontStyle={'label-small-bold'}\n      >\n        {label}\n      </Text>\n    </CardContainer>\n  );\n}\n","/* eslint-disable  @typescript-eslint/no-floating-promises */\nimport React, { useState } from 'react';\nimport { Close, CustomerCare, Feedback, Info, Question } from '@mtnkente/paragon-icons';\nimport { IconButton } from '@mtnkente/paragon-buttons';\nimport { SideSheet } from '@mtnkente/paragon-layouts';\nimport { Accordion, AccordionItem, Text } from '@mtnkente/paragon-display';\nimport {\n  Wrapper,\n  OptionItem,\n  OptionsPanel,\n  FloatingButton,\n  ButtonText,\n  ProductContainer,\n  OptionClose,\n} from './FeedbackButton.styled';\nimport { useFeatureAppUrls } from '../../../hooks/use-fetch-feature-app-urls';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { forms } from './configs/feedback-form-config';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\nimport { Col } from '@mtnkente/paragon-foundation';\nimport Loading from '../../../Loading/Loading';\nimport { ButtonProps, FormKey } from '../../../types/feedback-forms.types';\nimport { feedbackTypeConfig, helpCentreConfig, productConfig } from './configs/ProductCardConfig';\nimport SelectCard from './SelectCards/SelectCards';\nimport ConfirmationScreen from './feedbackModal/Confirmation';\nimport LogATicketComponent from './log-a-ticket/LogATicket';\nimport HelpCentreComponent from './help-centre/HelpCentre';\nimport { faqAccordionContent } from '../QuickQuotes/quickQuoteSupportTicket/faq.config';\nimport { AccordionWrap } from '../whatsappBsp/MessageTemplates/MessageTemplates.style';\nimport Faqs from '../whatsappBsp/SupportAndFaqs/Faqs';\n// import VideoPlayer from './content-card/VideoPlayer';\n// import { whatsAppVideoConfig } from './configs/video-player-configs';\n// import { documentsConfig } from './configs/documents-config';\n\ntype SheetView =\n  | 'idle'\n  | 'product'\n  | 'help-centre'\n  | 'help-centre-options'\n  | 'help-centre-content'\n  | 'feedback-types'\n  | 'form'\n  | 'log-ticket'\n  | 'confirmation';\n\nexport default function FeedbackButtonComponent({ profile }: ButtonProps): JSX.Element {\n  const [open, setOpen] = useState(false);\n  const [sheetOpen, setSheetOpen] = useState(false);\n  const [sheetView, setSheetView] = useState<SheetView>('idle');\n\n  const [selectedOption, setSelectedOption] = useState<FormKey | null>(null);\n  const [, setSelectedProduct] = useState<string | null>(null);\n  const [selectedFeedbackType, setSelectedFeedbackType] = useState<string | null>(null);\n  const [selectedHelpCentre, setSelectedHelpCentre] = useState<string | null>(null);\n  const [selectedHelpCentreOption, setSelectedHelpCentreOption] = useState<string | null>(null);\n\n  const [subtitle, setSubtitle] = useState<string>('Thank you for sharing');\n  const [caption, setCaption] = useState<string>('');\n  const [showConfirmation, setShowConfirmation] = useState(false);\n  const [submissionError, setSubmissionError] = useState(false);\n\n  const toggleOptions = (): void => setOpen((prev) => !prev);\n\n  // const handleDownload = async (fileUrl: string): Promise<void> => {\n  //   const link = document.createElement('a');\n  //   link.href = fileUrl;\n  //   link.download = '';\n  //   document.body.appendChild(link);\n  //   link.click();\n  //   document.body.removeChild(link);\n  // };\n\n  const openSheetFor = (option: FormKey): void => {\n    setSelectedOption(option);\n    setSheetOpen(true);\n\n    if (option === 'Help Centre') {\n      setCaption(\n        'Access FAQs, guides, and videos to quickly find answers and resolve issues on your own.'\n      );\n      setSubtitle('Which product would you like help with?');\n      setSheetView('help-centre');\n    } else if (option === 'Provide feedback') {\n      setCaption('Let us know about your experience');\n      setSubtitle('Select what you would like to provide feedback for');\n      setSheetView('feedback-types');\n    } else if (option === 'Log a Ticket') {\n      setCaption('');\n      setSubtitle(\n        'Need help with something specific? Provide details and our team will assist you.'\n      );\n      setSheetView('log-ticket');\n    } else {\n      setSheetView('idle');\n    }\n  };\n\n  const handleOptionClick = (option: FormKey): void => {\n    openSheetFor(option);\n    setOpen(false);\n  };\n\n  const closeSheet = (): void => {\n    setSheetOpen(false);\n    setSheetView('idle');\n    setShowConfirmation(false);\n    setSelectedProduct(null);\n    setSelectedFeedbackType(null);\n    setSelectedHelpCentre(null);\n    setSelectedHelpCentreOption(null);\n  };\n\n  const backToPrevious = (): void => {\n    switch (sheetView) {\n      case 'help-centre-content':\n        setSheetView('help-centre-options');\n        if (selectedHelpCentre) {\n          const centre = helpCentreConfig.find((c) => c.id === selectedHelpCentre);\n          setSubtitle(`${centre ? centre?.title : ''} Help Centre`);\n        } else {\n          setSubtitle('Select a Help Centre to explore');\n        }\n        setSelectedHelpCentreOption(null);\n        break;\n\n      case 'help-centre-options':\n        setSheetView('help-centre');\n        setSubtitle('Which product would you like help with?');\n        setSelectedHelpCentre(null);\n        break;\n\n      case 'form':\n        if (selectedOption === 'Provide feedback' && selectedFeedbackType === 'Product feedback') {\n          setSheetView('product');\n          setSubtitle('Which product would you like to share feedback on?');\n        } else if (selectedOption === 'Help Centre') {\n          setSheetView('help-centre-options');\n        } else if (\n          selectedOption === 'Provide feedback' &&\n          (selectedFeedbackType === 'General feedback' ||\n            selectedFeedbackType === 'Portal feedback')\n        ) {\n          setSheetView('feedback-types');\n          setSubtitle('Select what you would like to provide feedback for');\n        } else {\n          setSheetView('feedback-types');\n          setSubtitle('Select what you would like to provide feedback for');\n        }\n        break;\n\n      case 'product':\n        setSheetView('feedback-types');\n        setSubtitle('Select what you would like to provide feedback for');\n        setSelectedProduct(null);\n        break;\n\n      case 'feedback-types':\n        setSheetView('idle');\n        closeSheet();\n        break;\n\n      default:\n        closeSheet();\n    }\n  };\n\n  const handleProductSelect = (productId: string): void => {\n    const product = productConfig.find((p) => p.id === productId);\n    setSelectedProduct(product?.title ?? null);\n    if (product?.title) localStorage.setItem('productTitle', product.title);\n    setSubtitle(product?.title ?? 'Thank you for sharing');\n    setSheetView('form');\n  };\n\n  const handleHelpCentreSelect = (centreId: string): void => {\n    const centre = helpCentreConfig.find((c) => c.id === centreId);\n    setSelectedHelpCentre(centre ? centre.id : null);\n    setSubtitle(`${centre ? centre.title : ''} Help Centre`);\n    setSheetView('help-centre-options');\n  };\n\n  const handleHelpCentreOptionSelect = (optionId: string): void => {\n    const centre = helpCentreConfig.find((c) => c.id === selectedHelpCentre);\n    const option = centre?.helpCentreOptions?.find((opt) => opt.id === optionId);\n    setSelectedHelpCentreOption(optionId);\n    setSubtitle(option?.title ?? '');\n    setSheetView('help-centre-content');\n  };\n\n  const handleFeedbackSelect = (feedbackId: string): void => {\n    const feedback = feedbackTypeConfig.find((f) => f.id === feedbackId);\n    setSelectedFeedbackType(feedback?.title ?? null);\n    if (feedback?.title) localStorage.setItem('FeedbackTitle', feedback.title);\n\n    if (feedback?.title === 'Product feedback') {\n      setSubtitle('Which product would you like to share feedback on?');\n      setSheetView('product');\n    } else {\n      setSubtitle(feedback?.title ?? 'Thank you for sharing');\n      setSheetView('form');\n    }\n  };\n\n  const getFormKey = (): FormKey | null => {\n    if (selectedOption === 'Help Centre') return 'General feedback';\n    if (selectedOption === 'Provide feedback' && selectedFeedbackType) {\n      if (selectedFeedbackType === 'General feedback') return 'General feedback';\n      if (selectedFeedbackType === 'Product feedback') return 'Product feedback';\n      if (selectedFeedbackType === 'Portal feedback') return 'Portal feedback';\n    }\n    return selectedOption;\n  };\n\n  const currentFormKey = getFormKey();\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n  };\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const renderProductSelect = (): JSX.Element => (\n    <ProductContainer>\n      <Text $fontStyle='label-small-bold'>Which product would you like to share feedback on?</Text>\n      {productConfig.map((product) => (\n        <SelectCard\n          key={product.id}\n          title={product.title}\n          description={product.description}\n          value={product.id}\n          image={product.image}\n          onClick={handleProductSelect}\n        />\n      ))}\n    </ProductContainer>\n  );\n\n  const renderHelpCentreSelect = (): JSX.Element => (\n    <ProductContainer>\n      <Text $fontStyle='label-small-bold'>Select a Help Centre to explore</Text>\n      {helpCentreConfig.map((centre) => (\n        <SelectCard\n          key={centre.id}\n          title={centre.title}\n          description={centre.description}\n          value={centre.id}\n          image={centre.image}\n          onClick={() => handleHelpCentreSelect(centre.id)}\n        />\n      ))}\n    </ProductContainer>\n  );\n\n  const renderHelpCentreOptions = (): JSX.Element => {\n    const centre = helpCentreConfig.find((c) => c.id === selectedHelpCentre);\n\n    return (\n      <ProductContainer>\n        <Text $fontStyle='label-small-bold'>{centre?.title} Help Centre</Text>\n\n        {centre?.helpCentreOptions?.map((card) => (\n          <HelpCentreComponent\n            key={card.id}\n            title={card.title}\n            description={card.description}\n            label={card.label}\n            onClick={() => handleHelpCentreOptionSelect(card.id)}\n          />\n        ))}\n      </ProductContainer>\n    );\n  };\n\n  const renderHelpCentreContent = (): JSX.Element | null => {\n    const centre = helpCentreConfig.find((c) => c.id === selectedHelpCentre);\n    const option = centre?.helpCentreOptions?.find((o) => o.id === selectedHelpCentreOption);\n\n    if (!option) return null;\n\n    return (\n      <ProductContainer>\n        <Text $fontStyle='label-small-bold' style={{ marginBottom: '1rem' }}>\n          {option.title}\n        </Text>\n\n        {option.id === 'faq' && (\n          <>\n            {centre?.title === 'Converge' && (\n              <AccordionWrap style={{ padding: '0' }}>\n                {faqAccordionContent.map((item, index) => (\n                  <Accordion key={index}>\n                    <AccordionItem\n                      title={<p style={{ whiteSpace: 'normal' }}>{item.title}</p>}\n                      value={`item-${index}`}\n                    >\n                      {item.content}\n                    </AccordionItem>\n                  </Accordion>\n                ))}\n              </AccordionWrap>\n            )}\n            {centre?.title === 'WhatsApp BM' && (\n              <div style={{ width: '100%', padding: '0' }}>\n                <Faqs knowledgeHub={true} />\n              </div>\n            )}\n          </>\n        )}\n\n        {/* {option.id === 'documents' && (\n          <>\n            {(centre?.title === 'Converge' || centre?.title === 'WhatsApp BM') && (\n              <>\n                {documentsConfig.map((item, index) => (\n                  <SelectCard\n                    key={index}\n                    title={item.title}\n                    description={item.description}\n                    download={true}\n                    value={item.id}\n                    icon={<Document />}\n                    onClick={(): void => handleHelpCentreSelect(centre.id)}\n                    onDownloadClick={(): Promise<void> => handleDownload(item.fileUrl)}\n                  />\n                ))}\n              </>\n            )}\n          </>\n        )} */}\n\n        {/* {option.id === 'videos' && (\n          <>\n            {centre?.title === 'WhatsApp BM' && (\n              <>\n                {whatsAppVideoConfig.map((item, index) => (\n                  <VideoPlayer\n                    key={index}\n                    videoUrl={item.videoUrl}\n                    title={item.title}\n                    subtitle={item.subtitle}\n                  />\n                ))}\n              </>\n            )}\n          </>\n        )} */}\n      </ProductContainer>\n    );\n  };\n\n  return (\n    <>\n      {!urls.connectForm ? (\n        <Loading isLoading />\n      ) : (\n        <>\n          <Wrapper>\n            {open && (\n              <OptionsPanel>\n                <OptionClose onClick={toggleOptions}>\n                  <Close width={24} height={24} color='#344052' />\n                </OptionClose>\n\n                <OptionItem onClick={() => handleOptionClick('Help Centre')}>\n                  <Question width={24} height={24} color='#344052' />\n                  <Text $colour='full' $fontStyle='caption-regular'>\n                    Help centre\n                  </Text>\n                </OptionItem>\n\n                <OptionItem onClick={() => handleOptionClick('Provide feedback')}>\n                  <Feedback width={24} height={24} color='#344052' />\n                  <Text $colour='full' $fontStyle='caption-regular'>\n                    Provide feedback\n                  </Text>\n                </OptionItem>\n\n                <OptionItem onClick={() => handleOptionClick('Log a Ticket')}>\n                  <CustomerCare width={24} height={24} color='#344052' />\n                  <Text $colour='full' $fontStyle='caption-regular'>\n                    Log a ticket\n                  </Text>\n                </OptionItem>\n              </OptionsPanel>\n            )}\n\n            <FloatingButton onClick={toggleOptions} $expanded={open}>\n              <IconButton $icon={<Info />} $isIconPrimary $variant='filled' label='' />\n              <span>\n                <ButtonText>Knowledge Hub</ButtonText>\n              </span>\n            </FloatingButton>\n          </Wrapper>\n\n          {sheetOpen && (\n            <SideSheet\n              $cornerRadius\n              $hasBackArrow={\n                sheetView !== 'idle' && sheetView !== 'log-ticket' && sheetView !== 'confirmation'\n              }\n              $position='right'\n              $variant='elevated'\n              close\n              title={selectedOption ?? 'Feedback'}\n              onBackArrow={backToPrevious}\n              onClose={closeSheet}\n              $isSheetOpen\n              style={{ width: '31.25rem', overflow: 'auto' }}\n            >\n              <Text $fontStyle='caption-regular'>{caption}</Text>\n              {showConfirmation || sheetView === 'confirmation' ? (\n                <ConfirmationScreen\n                  hasError={submissionError}\n                  setIsVisible={() => {\n                    setShowConfirmation(false);\n                    closeSheet();\n                  }}\n                />\n              ) : sheetView === 'log-ticket' ? (\n                <LogATicketComponent onClose={closeSheet} />\n              ) : sheetView === 'product' ? (\n                renderProductSelect()\n              ) : sheetView === 'help-centre' ? (\n                renderHelpCentreSelect()\n              ) : sheetView === 'help-centre-options' ? (\n                renderHelpCentreOptions()\n              ) : sheetView === 'help-centre-content' ? (\n                renderHelpCentreContent()\n              ) : sheetView === 'feedback-types' ? (\n                <ProductContainer>\n                  <Text $fontStyle='label-small-bold'>\n                    Select what you would like to provide feedback for\n                  </Text>\n                  {feedbackTypeConfig.map((feedback) => (\n                    <SelectCard\n                      key={feedback.id}\n                      title={feedback.title}\n                      description={feedback.description}\n                      value={feedback.id}\n                      image={feedback.image}\n                      icon={feedback.icon}\n                      onClick={() => handleFeedbackSelect(feedback.id)}\n                    />\n                  ))}\n                </ProductContainer>\n              ) : sheetView === 'form' && currentFormKey ? (\n                <FeatureAppLoader\n                  featureAppId='fa-feedback-form'\n                  src={urls.connectForm}\n                  moduleType=''\n                  config={{\n                    data: forms[currentFormKey]\n                      ? {\n                          ...forms[currentFormKey],\n                          handleSubmit: async (formData: any): Promise<void> => {\n                            try {\n                              await forms[currentFormKey]?.handleSubmit?.(formData, {\n                                onSuccess: () => {\n                                  setSubmissionError(false);\n                                  setShowConfirmation(true);\n                                  setSheetView('confirmation');\n                                },\n                                onError: () => {\n                                  setSubmissionError(true);\n                                  setShowConfirmation(true);\n                                  setSheetView('confirmation');\n                                },\n                              });\n                            } catch (err) {\n                              console.error('❌ Error during form submission:', err);\n                              setSubmissionError(true);\n                              setShowConfirmation(true);\n                              setSheetView('confirmation');\n                            }\n                          },\n                        }\n                      : undefined,\n                    userInfo: profile,\n                    isFeedbackForm: true,\n                  }}\n                  onError={(error: unknown) => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams) =>\n                    error ? (\n                      <Col style={{ flex: 1, width: '100%', padding: 0 }} $xs={0}>\n                        <ErrorUi productName={'Request Product'} />\n                      </Col>\n                    ) : (\n                      <Col style={{ flex: 1, width: '100%', padding: 0 }} $xs={0}>\n                        {featureAppNode}\n                      </Col>\n                    )\n                  }\n                </FeatureAppLoader>\n              ) : (\n                <ProductContainer>\n                  <Text $fontStyle='caption-regular' style={{ paddingLeft: '24px' }}>\n                    {subtitle}\n                  </Text>\n                </ProductContainer>\n              )}\n            </SideSheet>\n          )}\n        </>\n      )}\n    </>\n  );\n}\n","import { useRef } from 'react';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { ProvideFeedbackResponse } from '../models/provide-feedback-response';\n\ninterface LogoutProps {\n  logoutF: () => Promise<void>;\n  continueLogout: () => void;\n}\n\nexport const useLogoutWithFeedback = (\n  shouldShowLogoutFeedback: boolean,\n  setShowFeedbackModal: (v: boolean) => void,\n  submissions: ProvideFeedbackResponse[]\n): LogoutProps => {\n  const { logout } = useAuth0();\n\n  const continueLogoutRef: React.MutableRefObject<(() => void) | undefined> = useRef<() => void>();\n\n  const logoutF = async (): Promise<void> => {\n    const hasSubmissions = Array.isArray(submissions) && submissions.length > 0;\n\n    if (hasSubmissions && shouldShowLogoutFeedback) {\n      setShowFeedbackModal(true);\n\n      return new Promise<void>((resolve) => {\n        continueLogoutRef.current = resolve;\n      }).then(() => executeLogout());\n    }\n\n    return executeLogout();\n  };\n\n  const executeLogout = async (): Promise<void> => {\n    await logout({\n      logoutParams: { returnTo: window.location.origin, federated: true },\n      clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n    });\n\n    localStorage.clear();\n    sessionStorage.clear();\n  };\n\n  const continueLogout = (): void => {\n    setShowFeedbackModal(false);\n\n    if (continueLogoutRef.current) {\n      continueLogoutRef.current();\n      continueLogoutRef.current = undefined;\n    }\n  };\n\n  return { logoutF, continueLogout };\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n`;\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n\n  @media only screen and (max-width: 768px) {\n    margin-bottom: 400px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    margin-bottom: 750px;\n  }\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const FaqHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n      padding-bottom: 30px;\n    `;\n  }}\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      ${typography['body-small-semibold']};\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { DashboardWrapper, FeatureAppContainer, HeaderWrapper } from './CreateFlows.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface CreateFlowsProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nconst CreateFlows = ({ name, profile, isSupueruser, logoutF }: CreateFlowsProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loadingNot, setloadingNot] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setloadingNot(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setloadingNot(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setloadingNot(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    supportTicket: process.env.REACT_APP_SUPPORT_TICKET_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Create flows',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loadingNot, profile]\n  );\n\n  // const Data = {\n  //   themeMode: 'light',\n  //   title: 'Need Help? Log a Ticket',\n  //   bodyText:\n  //     'Need help with something specific? Log a support ticket to get assistance from our dedicated team. Provide details about your issue or request, and we’ll ensure it’s addressed promptly.',\n  //   img: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/log support ticket.jpg',\n  //   backgroundImg: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/top-graphic@2x.png',\n  //   url: process.env.REACT_APP_LOG_SUPPORT_URL,\n  // };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.supportTicket ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loadingNot && (\n                <FeatureAppLoader\n                  featureAppId='fa-support-and-faq-header'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Whatsapp BSP Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-log-support-and-faq-create-flows'\n                src={urls.supportTicket}\n                config={{ isCreateFlow: true }}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default CreateFlows;\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const MainContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['padding-2xlarge']};\n    flex: 1 0 0;\n    align-self: stretch;\n  `}\n`;\n\nexport const HeadingConatiner = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-none']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-2xsmall']};\n    align-self: stretch;\n  `}\n`;\n\nexport const HeadingWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n\n  @media (max-width: 768px) {\n    ${({ theme }): DefaultTheme => css`\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['padding-medium']};\n    `}\n  }\n`;\n\nexport const DashboardContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    gap: ${theme.floats['margin-2xlarge']};\n  `}\n`;\n\nexport const ReportContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-large']};\n    align-self: stretch;\n  `}\n`;\n\nexport const ProductList = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    /* display: flex;\nalign-items: flex-start;\nalign-content: flex-start;\ngap: 24px ${theme.floats['margin-large']};\nalign-self: stretch;\nflex-wrap: wrap; */\n    display: grid;\n    grid-template-columns: repeat(3, 1fr); /* Always 3 columns */\n    gap: ${theme.floats['margin-large']}; /* spacing between cards */\n    width: 100%;\n    align-items: start;\n  `}\n`;\n\nexport const EmptyWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  flex: 1;\n  min-height: calc(100vh - 270px);\n  width: 100%;\n`;\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Container = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-4xlarge']}\n      ${theme.floats['search-suggestion-container-padding-left-right']};\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: ${theme.floats['search-suggestion-content-margin']};\n    flex: 1 0 0;\n    align-self: stretch;\n\n    border-radius: ${theme.floats['corner-radius-medium']};\n    border: 1px solid ${theme.colors['border-colour-opacity-low-inverse']};\n    background: ${theme.colors['colour-opacity-lowest-inverse']};\n  `}\n`;\n\nexport const Icon = styled.div`\n  svg {\n    width: 36px;\n    height: 36px;\n    aspect-ratio: 1/1;\n  }\n`;\n\nexport const Content = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    width: 560px;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: ${theme.floats['margin-medium']};\n  `}\n`;\n","import React from 'react';\nimport { Container, Icon, Content } from './NoResults.styles';\nimport { MicroButton } from '@mtnkente/paragon-buttons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Info, PlusWithCircle } from '@mtnkente/paragon-icons';\n\nconst NoResults = (): JSX.Element => {\n  return (\n    <Container data-testid='no-results'>\n      <Icon>\n        <Info />\n      </Icon>\n      <Content>\n        <Text $fontStyle='label-large-bold' style={{ textAlign: 'center' }}>\n          No available reports yet\n        </Text>\n        <Text $fontStyle='caption-regular' style={{ textAlign: 'center' }}>\n          You don’t have any active services with reporting enabled.Add a service that supports\n          reporting to start viewing insights.\n        </Text>\n        <MicroButton label='Add A Service With Reporting' icon={<PlusWithCircle />} />\n      </Content>\n    </Container>\n  );\n};\n\nexport default NoResults;\n","import { styled, css, DefaultTheme } from 'styled-components';\n\nexport const Container = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    /* position: relative;\n    margin: 0 -8px -8px;\n    height: 12.3125rem; */\n    padding: ${theme.floats['padding-xlarge']} ${theme.floats['padding-large']};\n    /* flex-direction: column;\n    justify-content: space-between; */\n    align-items: flex-start;\n    gap: ${theme.floats['padding-large']};\n\n    border-radius: ${theme.floats['corner-radius-medium']};\n    border: 1px solid ${theme.colors['border-colour-opacity-low-inverse']};\n    background: ${theme.colors['colour-surface-full']};\n  `}\n`;\n\nexport const Icon = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    width: 64px;\n    height: 64px;\n    padding: ${theme.floats['padding-2xsmall']};\n    align-items: center;\n    gap: 10px;\n    flex-shrink: 0;\n    aspect-ratio: 1/1;\n  `}\n`;\n\nexport const MainContent = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-medium']};\n    flex: 1 0 0;\n  `}\n`;\n\nexport const Title = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-xsmall']};\n    align-self: stretch;\n  `}\n`;\n","import React from 'react';\nimport { Container, Icon, MainContent, Title } from './ReportCard.styled';\nimport { MicroButton } from '@mtnkente/paragon-buttons';\nimport { Text } from '@mtnkente/paragon-display';\n\ninterface ReportCardProps {\n  icon: React.ReactElement;\n  productName: string;\n  serviceNumber: number;\n  buttonEnabled: boolean;\n  buttonLabel: string;\n  onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nconst ReportCard = ({\n  icon,\n  productName,\n  serviceNumber,\n  buttonEnabled,\n  buttonLabel,\n  onClick,\n}: ReportCardProps): JSX.Element => {\n  return (\n    <Container data-testid='report-card'>\n      <Icon>{icon}</Icon>\n      <MainContent>\n        <Title>\n          <Text $fontStyle='label-large-bold'>{productName}</Text>\n          <Text $fontStyle='caption-regular'>{`${serviceNumber} Active Services`}</Text>\n        </Title>\n        <MicroButton label={buttonLabel} disabled={!buttonEnabled} onClick={onClick} />\n      </MainContent>\n    </Container>\n  );\n};\n\nexport default ReportCard;\n","import React, { ReactElement, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Logout, UserSymbol, UserGroup } from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport {\n  DashboardContainer,\n  HeadingConatiner,\n  HeadingWrapper,\n  MainContainer,\n  ReportContainer,\n  ProductList,\n  EmptyWrapper,\n} from './ReportingDashboard.styles';\nimport { Text } from '@mtnkente/paragon-display';\nimport NoResults from './NoResults/NoResults';\nimport DarkFibreIcon from '../../QuickQuotes/icons/DarkFibreIcon';\nimport ReportCard from './ReportCard/ReportCard';\nimport L2VpnIcon from '../../QuickQuotes/icons/L2VpnIcon';\nimport { useNavigate } from 'react-router-dom';\n\ntype ReportingDashboardProps = {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n};\n\ntype Product = {\n  id: string;\n  productName: string;\n  serviceNumber: number;\n  hasReport: boolean;\n  icon: React.ReactElement;\n  onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n};\n\nconst ReportingDashboard = ({\n  profile,\n  isSupueruser,\n  logoutF,\n}: ReportingDashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const navigate = useNavigate();\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Reports',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        // {\n        //   id: '2',\n        //   label: 'Notification Preferences',\n        //   icon: <Notification />,\n        //   redirectUrl: '/notification',\n        //   activeTab: '',\n        // },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      login: logoutF,\n    }),\n    [profile]\n  );\n\n  // dummy data to be replaced with actual services a user has\n  const [products] = useState<Product[]>([\n    // { id: '1', productName: 'IP Transit Reports', serviceNumber: 3, hasReport: true, icon: <IpTransitIcon fill=\"#344052\" /> },\n    {\n      id: '2',\n      productName: 'L2 VPN Reports',\n      serviceNumber: 5,\n      hasReport: true,\n      icon: <L2VpnIcon fill='#344052' />,\n      onClick: (): void => {\n        navigate('/converge/services/l2vpn/reporting');\n      },\n    },\n    {\n      id: '3',\n      productName: 'Dark Fibre Reports',\n      serviceNumber: 2,\n      hasReport: false,\n      icon: <DarkFibreIcon fill='#344052' />,\n    },\n    // { id: '5', productName: 'DIA Reports', serviceNumber: 2, hasReport: true, icon: <DiaIcon fill=\"#344052\" /> },\n  ]);\n\n  const availableReports = products.filter((p) => p.hasReport);\n  const unavailableReports = products.filter((p) => !p.hasReport);\n\n  const renderReportSections = (): JSX.Element => {\n    // No products\n    if (products.length === 0) {\n      return (\n        <EmptyWrapper>\n          <NoResults />\n        </EmptyWrapper>\n      );\n    }\n\n    // Products but no reports\n    if (availableReports.length === 0 && unavailableReports.length > 0) {\n      return (\n        <>\n          <ReportContainer>\n            <Text $fontStyle='label-large-bold'>{`Available Reports (${availableReports.length})`}</Text>\n            <NoResults />\n          </ReportContainer>\n\n          <ReportContainer>\n            <Text $fontStyle='label-large-bold'>{`Reports Not Yet Available (${unavailableReports.length})`}</Text>\n\n            <ProductList>\n              {unavailableReports.map((p) => (\n                <ReportCard\n                  key={p.id}\n                  icon={p.icon}\n                  productName={p.productName}\n                  serviceNumber={p.serviceNumber}\n                  buttonEnabled={false}\n                  buttonLabel='Coming Soon'\n                />\n              ))}\n            </ProductList>\n          </ReportContainer>\n        </>\n      );\n    }\n\n    // Only available reports\n    if (availableReports.length > 0 && unavailableReports.length === 0) {\n      return (\n        <ReportContainer>\n          <Text $fontStyle='label-large-bold'>{`Available Reports (${availableReports.length})`}</Text>\n          <ProductList>\n            {availableReports.map((p) => (\n              <ReportCard\n                key={p.id}\n                icon={p.icon}\n                productName={p.productName}\n                serviceNumber={p.serviceNumber}\n                buttonEnabled={true}\n                buttonLabel='View Reports'\n                onClick={p.onClick}\n              />\n            ))}\n          </ProductList>\n        </ReportContainer>\n      );\n    }\n\n    // Both available and unavailable reports\n    return (\n      <>\n        <ReportContainer>\n          <Text $fontStyle='label-large-bold'>{`Available Reports (${availableReports.length})`}</Text>\n          <ProductList>\n            {availableReports.map((p) => (\n              <ReportCard\n                key={p.id}\n                icon={p.icon}\n                productName={p.productName}\n                serviceNumber={p.serviceNumber}\n                buttonEnabled={true}\n                buttonLabel='View Reports'\n                onClick={p.onClick}\n              />\n            ))}\n          </ProductList>\n        </ReportContainer>\n\n        <ReportContainer>\n          <Text $fontStyle='label-large-bold'>{`Reports Not Yet Available (${unavailableReports.length})`}</Text>\n          <ProductList>\n            {unavailableReports.map((p) => (\n              <ReportCard\n                key={p.id}\n                icon={p.icon}\n                productName={p.productName}\n                serviceNumber={p.serviceNumber}\n                buttonEnabled={false}\n                buttonLabel='No Reports Available'\n              />\n            ))}\n          </ProductList>\n        </ReportContainer>\n      </>\n    );\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <DashboardContainer data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              <FeatureAppLoader\n                featureAppId='fa-header-reporting'\n                src={urls.header}\n                moduleType=''\n                config={HeaderData}\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Converge Header'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </HeaderWrapper>\n\n            <MainContainer>\n              <HeadingWrapper>\n                <HeadingConatiner>\n                  <Text $colour='full' $fontStyle='title-large-bold'>\n                    Reporting and monitoring\n                  </Text>\n                  <Text $colour='subtle' $fontStyle='body-small-regular'>\n                    View and monitor analytics for all your active services.\n                  </Text>\n                </HeadingConatiner>\n              </HeadingWrapper>\n              {renderReportSections()}\n            </MainContainer>\n          </DashboardContainer>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default ReportingDashboard;\n","import styled from 'styled-components';\n\nexport const ActionButtonContainer = styled.div`\n  display: flex;\n  flex-direction: flex-start;\n  margin-left: -60px;\n`;\n\nexport const MetricCardWrapper = styled.div`\n  display: flex;\n  align-items: flex-start;\n  align-content: flex-start;\n  gap: 24px;\n  padding-left: 0px;\n  align-self: stretch;\n  flex-wrap: nowrap;\n`;\n","import React from 'react';\nimport { Arrow } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\nimport { StatusTag, StatusText } from '../../converge/ServiceInventory/ServiceInventory.style';\nimport { MicroButton } from '@mtnkente/paragon-buttons';\nimport { ActionButtonContainer } from './ProductReport.styles';\nimport { NavigateFunction } from 'react-router-dom';\n\nexport const getColumns = (\n  navigate: NavigateFunction\n): (\n  | {\n      key: string;\n      label: string;\n      sortable: string;\n      render: (row: any) => JSX.Element;\n    }\n  | {\n      key: string;\n      label: string;\n      render: (row: any) => JSX.Element;\n      sortable?: undefined;\n    }\n)[] => [\n  {\n    key: 'serviceId',\n    label: 'Service Id',\n    sortable: 'numerical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.serviceId}\n      </Text>\n    ),\n  },\n  {\n    key: 'status',\n    label: 'Status',\n    render: (): JSX.Element => (\n      <StatusTag colour='positive'>\n        <StatusIndicator $color='positive' />\n        <StatusText colour='positive'>Active</StatusText>\n      </StatusTag>\n    ),\n  },\n  {\n    key: 'bandwidth',\n    label: 'Bandwidth',\n    sortable: 'numerical',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.bandwidth}\n      </Text>\n    ),\n  },\n  {\n    key: 'serviceLocations',\n    label: 'Service Location(s)',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.serviceLocation.locationA && row.serviceLocation.locationB\n          ? `${row.serviceLocation.locationA} <-> ${row.serviceLocation.locationB}`\n          : row.serviceLocation.locationA}\n      </Text>\n    ),\n  },\n\n  {\n    key: 'viewReports',\n    label: '',\n    render: (): JSX.Element => (\n      <ActionButtonContainer>\n        <MicroButton\n          label='View Reports'\n          icon={<Arrow />}\n          onClick={(): void => {\n            navigate('/converge/services/reporting');\n          }}\n        />\n      </ActionButtonContainer>\n    ),\n  },\n];\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const expandableData = (row: any): { label: string; value: any }[] => {\n  return [\n    { label: 'Service name', value: row.additionalInfo.serviceName },\n    { label: 'SLA', value: row.additionalInfo.sla },\n    { label: 'Start Date', value: row.additionalInfo.contractStartDate },\n    { label: 'End Date', value: row.additionalInfo.contractEndDate },\n    { label: 'Circuit ID', value: row.additionalInfo.circuitId },\n    { label: 'Subsea Cable', value: row.additionalInfo.subseaCable },\n  ].filter((item) => item.value !== null && item.value !== undefined && item.value !== '');\n};\n\nexport const filterCategories = [\n  {\n    columnKey: 'bandwidth',\n    label: 'Bandwidth',\n    fields: ['bandwidth'],\n    options: [\n      { label: '1 Mbps', value: '1 Mbps' },\n      { label: '2 Mbps', value: '2 Mbps' },\n      { label: '3 Mbps', value: '3 Mbps' },\n      { label: '4 Mbps', value: '4 Mbps' },\n      { label: '5 Mbps', value: '5 Mbps' },\n      { label: '6 Mbps', value: '6 Mbps' },\n      { label: '8 Mbps', value: '8 Mbps' },\n      { label: '10 Mbps', value: '10 Mbps' },\n      { label: '15 Mbps', value: '15 Mbps' },\n      { label: '20 Mbps', value: '20 Mbps' },\n      { label: '30 Mbps', value: '30 Mbps' },\n      { label: '40 Mbps', value: '40 Mbps' },\n      { label: '45 Mbps', value: '45 Mbps' },\n      { label: '50 Mbps', value: '50 Mbps' },\n      { label: '60 Mbps', value: '60 Mbps' },\n      { label: '80 Mbps', value: '80 Mbps' },\n      { label: '100 Mbps', value: '100 Mbps' },\n      { label: '155 Mbps', value: '155 Mbps' },\n      { label: '200 Mbps', value: '200 Mbps' },\n      { label: '300 Mbps', value: '300 Mbps' },\n      { label: '400 Mbps', value: '400 Mbps' },\n      { label: '500 Mbps', value: '500 Mbps' },\n      { label: '600 Mbps', value: '600 Mbps' },\n      { label: '620 Mbps', value: '620 Mbps' },\n      { label: '700 Mbps', value: '700 Mbps' },\n      { label: '800 Mbps', value: '800 Mbps' },\n      { label: '900 Mbps', value: '900 Mbps' },\n      { label: '1 Gbps', value: '1 Gbps' },\n    ],\n  },\n\n  {\n    columnKey: 'serviceLocations',\n    label: 'Service Locations',\n    fields: ['serviceLocation.locationA', 'serviceLocation.locationB'],\n    options: [\n      { label: 'Angola', value: 'Angola' },\n      { label: 'Botswana', value: 'Botswana' },\n      { label: 'Burkina Faso', value: 'Burkina Faso' },\n      { label: 'Cameroon', value: 'Cameroon' },\n      { label: 'Congo B', value: 'Congo B' },\n      { label: 'Djibouti', value: 'Djibouti' },\n      { label: 'France', value: 'France' },\n      { label: 'Germany', value: 'Germany' },\n      { label: 'Ghana', value: 'Ghana' },\n      { label: 'Guinea Bissau', value: 'Guinea Bissau' },\n      { label: 'Guinea Conakry', value: 'Guinea Conakry' },\n      { label: 'Ivory Coast', value: 'Ivory Coast' },\n      { label: 'Kenya', value: 'Kenya' },\n      { label: 'Lesotho', value: 'Lesotho' },\n      { label: 'Liberia', value: 'Liberia' },\n      { label: 'Mali', value: 'Mali' },\n      { label: 'Mozambique', value: 'Mozambique' },\n      { label: 'Namibia', value: 'Namibia' },\n      { label: 'Netherlands', value: 'Netherlands' },\n      { label: 'Niger', value: 'Niger' },\n      { label: 'Nigeria', value: 'Nigeria' },\n      { label: 'Rwanda', value: 'Rwanda' },\n      { label: 'South Africa', value: 'South Africa' },\n      { label: 'South Sudan', value: 'South Sudan' },\n      { label: 'Sudan', value: 'Sudan' },\n      { label: 'Swaziland', value: 'Swaziland' },\n      { label: 'Tanzania', value: 'Tanzania' },\n      { label: 'Togo', value: 'Togo' },\n      { label: 'Uganda', value: 'Uganda' },\n      { label: 'United Arab Emirates', value: 'United Arab Emirates' },\n      { label: 'United Kingdom', value: 'United Kingdom' },\n      { label: 'Zambia', value: 'Zambia' },\n    ],\n  },\n];\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { FeatureAppContainer } from '../../QuickQuotes/SavedQuotes/SavedQuotes.styled';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { Text } from '@mtnkente/paragon-display';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport {\n  Data,\n  Logout,\n  Modem,\n  Save,\n  SpeedFast,\n  UserGroup,\n  UserSymbol,\n} from '@mtnkente/paragon-icons';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile, ServiceInfo } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport FeedbackModal from '../../feedback/feedbackModal/FeedbackModal';\nimport { expandableData, filterCategories, getColumns } from './ProductReport.config';\nimport {\n  HeadingConatiner,\n  HeadingWrapper,\n  TableContainer,\n} from '../../converge/ServiceInventory/ServiceInventory.style';\nimport { useProfile } from '../../../../utils/ProfileProvider';\nimport { useNavigate } from 'react-router-dom';\n\ninterface DashboardProps {\n  data: ServiceInfo[] | undefined;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nexport const ProductReport = ({\n  data,\n  profile,\n  isSupueruser,\n  logoutF,\n}: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const navigate = useNavigate();\n  const [showFeedbackModal, setShowFeedbackModal] = useState(false);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [serviceInventory, setServiceInventory] = React.useState<ServiceInfo[] | undefined>(\n    undefined\n  );\n  const [loadingData, setLoadingData] = useState<boolean>(true);\n\n  const { userServiceInventory } = useProfile();\n  useEffect(() => {\n    const retrievedData = data && data.length > 0 ? data : userServiceInventory;\n    if (retrievedData && retrievedData.length > 0) {\n      localStorage.setItem('convergeServiceInventory', JSON.stringify(retrievedData));\n    }\n    setLoadingData(false);\n  }, [data, userServiceInventory]);\n\n  const metricData = useMemo(() => {\n    const dataSource = (data ?? userServiceInventory ?? []).filter(\n      (item) => item.product === 'L2 VPN'\n    );\n    return [\n      {\n        title: 'Services',\n        description: 'Active Services',\n        icon: <SpeedFast />,\n        data: dataSource.length.toString(),\n      },\n      {\n        title: 'Bandwidth Utilisation',\n        description: 'Average Link Availability',\n        icon: <Data />,\n        data: '96%',\n      },\n      {\n        title: 'Service Availability',\n        description: 'Total data usage',\n        icon: <Save />,\n        data: '98.9%',\n      },\n      {\n        title: 'Devices',\n        description: 'Active Devices',\n        icon: <Modem />,\n        data: '10',\n      },\n    ];\n  }, [data, userServiceInventory]);\n\n  useEffect(() => {\n    const storedData = localStorage.getItem('convergeServiceInventory');\n    if (storedData) {\n      setServiceInventory(JSON.parse(storedData));\n    }\n  }, []);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    metricCards: process.env.REACT_APP_FA_PRODUCT_CARDS_URL ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Reports - L2 VPN',\n      title: 'Post Login',\n      backIcon: false,\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.metricCards || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-converge-services'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Converge Services Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      L2 VPN Reporting\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      View your L2 VPN Service and Device Reporting\n                    </Text>\n                  </HeadingConatiner>\n                </HeadingWrapper>\n                {loadingData ? (\n                  <Loading isLoading={true} />\n                ) : (\n                  <>\n                    <FeatureAppLoader\n                      featureAppId='fa-converge-metric-cards'\n                      src={urls.metricCards}\n                      moduleType=''\n                      config={{ metricData: true, data: metricData }}\n                      onError={(error: unknown): unknown => error}\n                    >\n                      {({\n                        error,\n                        featureAppNode,\n                      }: CustomFeatureAppRenderingParams): ReactElement => {\n                        return error ? (\n                          <Col\n                            style={{\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            <ErrorUi productName={'Converge Metric Card'} />\n                          </Col>\n                        ) : (\n                          <Col\n                            style={{\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            {featureAppNode}\n                          </Col>\n                        );\n                      }}\n                    </FeatureAppLoader>\n\n                    <FeatureAppLoader\n                      featureAppId='fa-converge-service-inventory'\n                      src={urls.table}\n                      moduleType=''\n                      config={{\n                        columns: getColumns(navigate),\n                        data:\n                          data && data.length > 0\n                            ? data.filter((item) => item.product === 'L2 VPN')\n                            : userServiceInventory && userServiceInventory.length > 0\n                              ? userServiceInventory.filter((item) => item.product === 'L2 VPN')\n                              : serviceInventory?.filter((item) => item.product === 'L2 VPN'),\n                        hasActions: false,\n                        filterCategories: filterCategories,\n                        expandableData: expandableData,\n                        isExpandable: true,\n                        tableHeading: 'Active L2 VPN services',\n                        tableSubHeading: 'Select a service you’d like to view reporting for',\n                      }}\n                      onError={(error: unknown): unknown => error}\n                    >\n                      {({\n                        error,\n                        featureAppNode,\n                        // loading,\n                      }: CustomFeatureAppRenderingParams): ReactElement => {\n                        return error ? (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            <ErrorUi productName={'Service Inventory Table'} />\n                          </Col>\n                        ) : (\n                          <Col\n                            style={{\n                              // display: loading ? 'none' : 'flex',\n                              flex: '1',\n                              width: '100%',\n                              padding: '0px',\n                            }}\n                            $xs={0}\n                          >\n                            {featureAppNode}\n                          </Col>\n                        );\n                      }}\n                    </FeatureAppLoader>\n                    {showFeedbackModal && (\n                      <FeedbackModal\n                        setIsVisible={setShowFeedbackModal}\n                        isVisible={!!showFeedbackModal}\n                        profile={profile}\n                        formType={'specifications'}\n                      />\n                    )}\n                  </>\n                )}\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const StyledAppContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    width: 100%;\n    padding: ${theme.floats['padding-medium']} ${theme.floats['padding-medium']}\n      ${theme.floats['padding-medium']} 19.5rem;\n    justify-content: space-between;\n    align-items: flex-start;\n  `}\n`;\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { DashboardWrapper, HeaderWrapper } from '../../customerportal/Dashboard/Dashboard.style';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\n\nimport {\n  Logout,\n  UserSymbol,\n  //   Tick,\n  //   PlusWithCircle,\n  //   Settings,\n  UserGroup,\n} from '@mtnkente/paragon-icons';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { FeatureAppContainer } from './ReportingAnalytics.styled';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nconst ReportingAnalytics = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    latencyMatrix: process.env.REACT_APP_FA_LATENCY_MATRIX ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'L2VPN Reporting',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.latencyMatrix ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-quick-quotes'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Quick Quotes Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-reporting-graphs'\n                src={urls.latencyMatrix}\n                config={{ type: 'reporting' }}\n                moduleType='umd'\n                onError={(error: unknown): unknown => error}\n              >\n                {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Reporting Graphs'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default ReportingAnalytics;\n","import styled, { DefaultTheme, css, createGlobalStyle } from 'styled-components';\n\nconst breakpoints = { mobile: '576px', tablet: '768px', tablet2: '1024px', desktop: '1200px' };\n\ninterface StatusTagProps {\n  colour: 'approved' | 'pending' | 'revoked';\n}\n\nexport const MainContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      width: 100%;\n      /* padding-top: 5rem; */\n      padding: 0 2.5rem;\n      gap: var(--margin-large, 1.5rem);\n      flex-direction: column;\n    `;\n  }}\n`;\n\nexport const BannerContainer = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      /* padding: 0 24px; */\n      padding-bottom: 35px;\n    `;\n  }}\n`;\nexport const Peering = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: block;\n      width: 100%;\n      @media (min-width: ${breakpoints.desktop}) {\n        padding: 0 176px;\n      }\n\n      @media (max-width: ${breakpoints.tablet}) {\n        padding: 0px 16px;\n      }\n      @media (max-width: ${breakpoints.tablet2}) {\n        padding: 0px 16px;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        padding: 0px 16px;\n      }\n    `;\n  }}\n`;\n\nexport const BSPBanner = styled.div`\n  ${(): DefaultTheme => {\n    return css`\n      display: flex;\n      height: 14.0625rem;\n      justify-content: space-between;\n      align-items: center;\n      flex-shrink: 0;\n      align-self: stretch;\n\n      border-radius: var(--corner-radius-medium, 1.5rem);\n      background: var(--page-bg-colour-dim, #e2e2d9);\n\n      @media (max-width: ${breakpoints.tablet}) {\n        margin: 24px auto;\n      }\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin: 0 auto 24px auto;\n      }\n    `;\n  }}\n`;\n\nexport const BSPInnerBanner = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  padding: var(--padding-xlarge, 2rem) var(--padding-4xlarge, 4rem) var(--padding-xlarge, 2rem)\n    var(--padding-2xlarge, 2.5rem);\n  gap: var(--padding-medium, 1rem);\n  flex: 1 0 0;\n`;\n\nexport const BannerHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n    `;\n  }}\n`;\nexport const BannerText = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['body-small-regular']};\n\n      @media (max-width: ${breakpoints.mobile}) {\n        margin-bottom: 0;\n      }\n    `;\n  }}\n`;\n\nexport const HeroBanenr = styled.div`\n  display: flex;\n  position: relative;\n  height: 14.75rem;\n  padding: var(--padding-xlarge, 2rem);\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: flex-start;\n  gap: var(--padding-xlarge, 2rem);\n  flex-shrink: 0;\n  align-self: stretch;\n  overflow: hidden;\n\n  border-radius: var(--corner-radius-medium, 1.5rem);\n  background: var(--colour-surface-full, #fff);\n\n  img {\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n\n    height: 100%;\n    width: auto;\n\n    mask-image: linear-gradient(270deg, black 20%, transparent 75%);\n    pointer-events: none;\n  }\n`;\n\nexport const HeroContent = styled.div`\n  display: flex;\n  width: 43.875rem;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--margin-large, 1.5rem);\n`;\n\nexport const TextContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: var(--padding-medium, 1rem);\n  align-self: stretch;\n`;\n\nexport const Actions = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  padding-left: 2rem;\n  align-self: stretch;\n`;\n\nexport const StyledComboButtonsOverride = styled.div`\n  .ComboButtonsstyles__StyledContainer-sc-1bvyp2b-0 {\n    display: flex;\n    flex-direction: row-reverse;\n    gap: 1rem;\n    width: 100%;\n    justify-content: flex-end;\n  }\n`;\n\nexport const ComboButtonsGlobalOverride = createGlobalStyle`\n  .ComboButtonsstyles__StyledContainer-sc-1bvyp2b-0 {\n    display: flex !important;\n    flex-direction: row-reverse !important;\n    max-width: 229px !important;\n    //gap: 1rem !important;\n    //width: 100% !important;\n    //justify-content: flex-end !important;\n  }\n`;\n\nexport const Container = styled.div`\n  margin-left: 40px;\n  margin-right: 40px;\n  padding: 16px 24px;\n  border: 1px solid #e5e7eb;\n  border-radius: 16px;\n  gap: 16px;\n`;\n\nexport const HeaderButton = styled.button`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  background: transparent;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n`;\n\nexport const HeaderLeft = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 12px;\n`;\n\nexport const Title = styled.span`\n  font-size: 1.125rem;\n  font-weight: 500;\n  color: #374151;\n  text-decoration: underline;\n`;\n\nexport const Content = styled.div`\n  margin-top: 1rem;\n  font-size: 0.95rem;\n  color: #4b5563;\n  animation: fadeIn 0.2s ease-in-out;\n  gap: 24px;\n\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n      transform: translateY(-4px);\n    }\n    to {\n      opacity: 1;\n      transform: translateY(0);\n    }\n  }\n`;\n\nexport const List = styled.ul`\n  list-style: disc;\n  padding-left: 1.2rem;\n  margin-top: 0.75rem;\n`;\n\nexport const ListItem = styled.li`\n  margin-bottom: 0.5rem;\n`;\n\nexport const InfoWrapper = styled.div`\n  padding-left: 40px;\n  padding-right: 40px;\n  gap: 24px;\n`;\n\nexport const InfoCard = styled.div`\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 24px;\n`;\n\nexport const InfoHeaderRow = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  margin-bottom: 16px;\n  color: #6b7280;\n  font-size: 0.875rem;\n  font-weight: 500;\n`;\n\nexport const InfoBodyText = styled.div`\n  color: #374151;\n  font-size: 0.875rem;\n  line-height: 1.5;\n`;\n\nexport const InfoGrid = styled.div`\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 20px;\n  margin-top: 20px;\n\n  @media (min-width: 768px) {\n    grid-template-columns: 1fr 1fr;\n  }\n`;\n\nexport const InfoValueText = styled.div`\n  color: #111827;\n  font-size: 1rem;\n  font-weight: 500;\n`;\n\nexport const StatusTag = styled.div<StatusTagProps>`\n  ${({ theme: { colors, floats }, colour }): DefaultTheme => {\n    return css`\n      display: inline-flex;\n      padding: ${floats['padding-2xsmall']} ${floats['padding-small']};\n      align-items: center;\n      gap: ${floats['padding-2xsmall']};\n\n      border-radius: ${floats['corner-radius-medium']};\n      border: 1px solid\n        ${colour === 'approved'\n          ? colors['border-colour-success']\n          : colour === 'pending'\n            ? colors['border-colour-warning']\n            : colors['border-colour-error']};\n      background: ${colour === 'approved'\n        ? colors['colour-surface-subtle-success']\n        : colour === 'pending'\n          ? colors['colour-surface-subtle-warning']\n          : colors['colour-error-inverse']};\n    `;\n  }}\n`;\n\nexport const StatusText = styled.p<StatusTagProps>`\n  ${({ theme: { colors, typography }, colour }): DefaultTheme => {\n    return css`\n      color: ${colour === 'approved'\n        ? colors['colour-success']\n        : colour === 'pending'\n          ? colors['colour-warning']\n          : colors['colour-error']};\n      ${typography['caption-regular']};\n\n      margin: 0;\n      padding: 0;\n    `;\n  }}\n`;\n","import React, { useState } from 'react';\nimport { Copy, Check } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\n\nconst maskCredential = (credential: string): string => {\n  if (!credential || credential.length < 8) return '********';\n  const visibleChars = 4;\n  const start = credential.slice(0, visibleChars);\n  const end = credential.slice(-visibleChars);\n  const masked = '*'.repeat(Math.max(8, credential.length - visibleChars * 2));\n  return `${start}${masked}${end}`;\n};\n\nconst MaskedCredentialCell = ({ value, label }: { value: string; label: string }): JSX.Element => {\n  const [isCopied, setIsCopied] = useState(false);\n\n  const handleCopy = async (e: React.MouseEvent): Promise<void> => {\n    e.stopPropagation();\n    try {\n      await navigator.clipboard.writeText(value);\n      setIsCopied(true);\n      setTimeout(() => setIsCopied(false), 2000);\n    } catch (err) {\n      console.error('Failed to copy:', err);\n    }\n  };\n\n  return (\n    <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n      <Text as='span' $fontStyle='caption-regular' style={{ width: 'fit-content' }}>\n        {maskCredential(value)}\n      </Text>\n      <div style={{ display: 'flex', gap: '4px' }}>\n        <button\n          onClick={(e: React.MouseEvent) => {\n            handleCopy(e).catch(() => {});\n          }}\n          style={{\n            background: 'none',\n            border: 'none',\n            cursor: 'pointer',\n            padding: '4px',\n            display: 'flex',\n            alignItems: 'center',\n            opacity: 0.7,\n          }}\n          title='Copy to clipboard'\n          aria-label={`Copy ${label}`}\n        >\n          {isCopied ? <Check /> : <Copy />}\n        </button>\n      </div>\n    </div>\n  );\n};\n\nexport default MaskedCredentialCell;\n","export function formatDate(timestamp: number): string {\n  const date = new Date(timestamp);\n\n  const month = String(date.getMonth() + 1).padStart(2, '0');\n  const day = String(date.getDate()).padStart(2, '0');\n  const year = String(date.getFullYear()).slice(-2);\n\n  let hours = date.getHours();\n  const minutes = String(date.getMinutes()).padStart(2, '0');\n\n  const ampm = hours >= 12 ? 'PM' : 'AM';\n  hours = hours % 12 || 12; // convert 0 → 12\n\n  return `${day}/${month}/${year} ${hours}:${minutes}${ampm}`;\n}\n","import React from 'react';\nimport { Text } from '@mtnkente/paragon-display';\nimport MaskedCredentialCell from './MaskedCredentials';\nimport { formatDate } from '../../../utils';\nimport { StatusTag, StatusText } from './ApiDocumentation.styles';\nimport { StatusIndicator } from '@mtnkente/paragon-indicators';\nimport { capitalizeFirstLetter } from '../../../utils/capitalise-text';\n\nexport const columns = [\n  {\n    key: 'appName',\n    label: 'App Name',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-semibold'>\n        {row.name}\n      </Text>\n    ),\n  },\n  {\n    key: 'callBackUrl',\n    label: 'Callback URL',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {row.callBackUrl}\n      </Text>\n    ),\n  },\n  {\n    key: 'createdOn',\n    label: 'Created On',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {formatDate(row.createdOn)}\n      </Text>\n    ),\n  },\n];\n\nexport const apiViewColumns = [\n  {\n    key: 'apiKey',\n    label: 'API Key',\n    render: (row: any): JSX.Element => (\n      // <Text as='span' $fontStyle='caption-semibold'>\n      //   {row.apiKey}\n      // </Text>\n      <MaskedCredentialCell value={row.apiKey} label='API Key' />\n    ),\n  },\n  {\n    key: 'consumerSecret',\n    label: 'Consumer Secret',\n    render: (row: any): JSX.Element => (\n      // <Text as='span' $fontStyle='caption-regular'>\n      //   {row.consumerSecret}\n      // </Text>\n      <MaskedCredentialCell value={row.consumerSecret} label='Consumer Secret' />\n    ),\n  },\n  {\n    key: 'createdOn',\n    label: 'Created On',\n    render: (row: any): JSX.Element => (\n      <Text as='span' $fontStyle='caption-regular'>\n        {formatDate(row.createdOn)}\n      </Text>\n    ),\n  },\n\n  {\n    key: 'status',\n    label: 'Status',\n    render: (row: any): JSX.Element => (\n      <StatusTag colour={row.status}>\n        <StatusIndicator\n          $color={\n            row.status === 'approved' ? 'positive' : row.status === 'pending' ? 'warning' : 'alert'\n          }\n        />\n        <StatusText colour={row.status}>{capitalizeFirstLetter(String(row.status))}</StatusText>\n      </StatusTag>\n    ),\n  },\n];\n\nexport const cardsFilterCategories = [\n  {\n    columnKey: 'category',\n    label: 'Category',\n    fields: ['category'],\n    options: [\n      { label: 'Fixed-Line', value: 'Fixed-Line' },\n      { label: 'Mobile', value: 'Mobile' },\n      { label: 'Cloud', value: 'Cloud' },\n      { label: 'Security', value: 'Security' },\n    ],\n  },\n  {\n    columnKey: 'environment',\n    label: 'Environment',\n    fields: ['environment'],\n    options: [\n      { label: 'UAT', value: 'UAT' },\n      { label: 'Production', value: 'Production' },\n      { label: 'Staging', value: 'Staging' },\n      { label: 'Development', value: 'Development' },\n    ],\n  },\n  {\n    columnKey: 'title',\n    label: 'Title',\n    fields: ['title'],\n    options: [\n      { label: 'Internet Exchange', value: 'Internet Exchange' },\n      { label: 'Fiber Internet', value: 'Fiber Internet' },\n      { label: 'MPLS', value: 'MPLS' },\n      { label: 'Point-to-Point', value: 'Point-to-Point' },\n    ],\n  },\n];\n\nexport const getActionsList = ({\n  navigate,\n}: {\n  navigate: any;\n}): Array<{\n  label: string;\n  icon: null;\n  onClick: (row: any) => void;\n}> => {\n  return [\n    {\n      label: 'View',\n      icon: null,\n      onClick: (row: any): void => {\n        navigate(`/whatsapp-bsp-apis/${row.name}`);\n      },\n    },\n  ];\n};\n","import React, { ReactElement, useState } from 'react';\nimport { ChevronUp, ChevronDown, Question } from '@mtnkente/paragon-icons';\n\nimport { Container, Content, HeaderButton, HeaderLeft } from './ApiDocumentation.styles';\nimport { ListItem, List, Text } from '@mtnkente/paragon-display';\n\nexport default function FAQCard(): ReactElement {\n  const [open, setOpen] = useState(false);\n\n  return (\n    <Container>\n      <HeaderButton onClick={() => setOpen(!open)}>\n        <HeaderLeft>\n          <Question style={{ width: '32px', height: '32px' }} />\n          <Text $fontStyle={'body-small-semibold'}>What is an App?</Text>\n        </HeaderLeft>\n        {open ? <ChevronUp /> : <ChevronDown />}\n      </HeaderButton>\n\n      {open && (\n        <Content>\n          <Text $fontStyle={'body-small-regular'} style={{ paddingBottom: '24px' }}>\n            An App represents a project that uses the API. Each App has its own API keys for\n            security, tracking, and permissions.\n          </Text>\n          <List $variant='unordered'>\n            <ListItem>Organize keys by project (web, mobile, server).</ListItem>\n            {/* <ListItem>Revoke one App’s key without affecting others.</ListItem>\n              <ListItem>Track usage and set per-App permissions/scopes.</ListItem> */}\n          </List>\n        </Content>\n      )}\n    </Container>\n  );\n}\n","import apiClient from '../../interceptors/auth-interceptor';\n\nexport const getAppDetails = async (\n  email: string,\n  appName: string,\n  correlationId: string\n): Promise<any> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbsp-app-details`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n      appName,\n    },\n  });\n\n  return response.data.data.products;\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\n/* eslint-disable react/no-children-prop */\n\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col } from '@mtnkente/paragon-foundation';\nimport { TabsComponent, TabList, TabTrigger, TabContents } from '@mtnkente/paragon-navigation';\nimport { Text } from '@mtnkente/paragon-display';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport {\n  BannerContainer,\n  HeroBanenr,\n  HeroContent,\n  MainContainer,\n  TextContent,\n  BSPBanner,\n  BSPInnerBanner,\n  BannerHeader,\n  BannerText,\n  ComboButtonsGlobalOverride,\n} from './ApiDocumentation.styles';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\nimport { createGlobalStyle } from 'styled-components';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport { Fault, Logout, Tick, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { CreateAppRequest, CustomerProfile } from '../../../models';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { getNotification } from '../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../utils';\nimport { MappedNotification } from '../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../utils/map-notification';\nimport { editNotification } from '../../../apis/edit-notification';\nimport { useFeatureAppUrls } from '../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../Loading/Loading';\nimport { InlineNotification, Modal } from '@mtnkente/paragon-overlays';\nimport { cardsFilterCategories, columns, getActionsList } from './ApiPortalTable.config';\nimport FAQCard from './FAQ';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { createApp, getApiDevAccount, getApiProducts } from '../../../apis';\nimport { getAllAppData } from './get-all-app-data';\nimport { createApiDev } from '../../../apis/rubyverse-portal/create-api-dev-account';\nimport { CreateUserRequest } from '../../../models/create-user-request';\n\nconst GlobalStyles = createGlobalStyle`\n  .sc-klYcpz.limFAJ {\n    display: none !important;\n  }\n`;\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst WhatsAppAPIPortal = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const navigate = useNavigate();\n  const location = useLocation();\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [isVerified, setIsVerified] = useState<boolean | null>(null); //set to false if you want to see the banner\n  const [formModal, setFormModal] = useState<boolean>(false);\n  const [isSuccess, setIsSuccess] = useState<boolean>(false);\n  const [isError, setIsError] = useState<boolean>(false);\n  const [showNotification, setShowNotification] = useState<boolean>(true); //change to false after first approval\n  const [apiProducts, setApiProducts] = useState<{ label: string }[]>([]);\n  const [userApps, setUserApps] = useState<string[]>([]);\n  const [appTableData, setAppTableData] = useState<any[]>([]);\n  const [newlyRegistered, setNewlyRegistered] = useState<boolean>(false);\n  const [createAppModal, setCreateAppModal] = useState<boolean>(false);\n\n  const correlationId = CORRELATION_ID;\n  const email = user?.email?.toLowerCase() ?? '';\n\n  useEffect(() => {\n    const checkDevAccount = async (): Promise<void> => {\n      try {\n        setLoading(true);\n        const userAccount = await getApiDevAccount(email, correlationId);\n        setIsVerified(true);\n        setUserApps(userAccount.apps);\n        setLoading(false);\n      } catch (error: any) {\n        if (error.response?.status === 404) {\n          setIsVerified(false);\n          setLoading(false);\n        } else {\n          setIsVerified(false);\n          setLoading(false);\n        }\n      }\n    };\n\n    checkDevAccount().catch(() => {});\n  }, []);\n\n  useEffect(() => {\n    const fetchProducts = async (): Promise<void> => {\n      try {\n        const products = await getApiProducts(email, correlationId);\n\n        const mapped = products.map((p: string) => ({ label: p }));\n\n        setApiProducts(mapped);\n      } catch (err) {\n        setApiProducts([]);\n      }\n    };\n\n    fetchProducts().catch(() => {});\n  }, []);\n\n  useEffect(() => {\n    if (!email || !userApps?.length) return;\n\n    const loadApps = async (): Promise<void> => {\n      setLoading(true);\n      const rows = await getAllAppData(email, userApps, correlationId);\n      setAppTableData(rows);\n      setLoading(false);\n    };\n\n    loadApps().catch(() => {});\n  }, [email, userApps]);\n\n  const createAccountFormConfig = {\n    formSections: [\n      {\n        fields: [\n          { label: 'Email', name: 'email', type: 'text', isOptional: false },\n          { label: 'First Name', name: 'firstName', type: 'text', isOptional: false },\n          { label: 'Last Name', name: 'lastName', type: 'text', isOptional: false },\n        ],\n      },\n    ],\n    comboButtons: true,\n    leftButtonLabel: 'Cancel',\n    rightButtonLabel: 'Request Access',\n    leftButtonAction: (): void => {\n      setFormModal(false);\n      setIsSuccess(false);\n      setIsError(false);\n    },\n    handleSubmit: async (formData: CreateUserRequest): Promise<void> => {\n      //ADD API CALL FOR CREATING ACCOUNT HERE\n      try {\n        await createApiDev(correlationId, email, formData);\n        setIsVerified(true);\n        setNewlyRegistered(true);\n        setFormModal(false);\n        setIsSuccess(true);\n      } catch (err) {\n        setIsError(true);\n        setFormModal(false);\n        setIsSuccess(false);\n      }\n    },\n  };\n\n  const createAppFormConfig = useMemo(\n    () => ({\n      formSections: [\n        {\n          fields: [\n            { label: 'App Name', name: 'name', type: 'text', isOptional: false },\n            {\n              label: 'Callback URL',\n              name: 'callbackUrl',\n              type: 'text',\n              isOptional: true,\n            },\n            {\n              label: 'API Product',\n              name: 'apiProducts',\n              type: 'collapsibleCheckBox',\n              options: apiProducts,\n              isOptional: false,\n            },\n          ],\n        },\n      ],\n      comboButtons: true,\n      leftButtonLabel: 'Cancel',\n      rightButtonLabel: 'Create',\n      leftButtonAction: (): void => {\n        setCreateAppModal(false);\n        setIsSuccess(false);\n        setIsError(false);\n      },\n      handleSubmit: async (formData: CreateAppRequest): Promise<void> => {\n        try {\n          await createApp(correlationId, email, formData);\n          setCreateAppModal(false);\n          setIsSuccess(true);\n        } catch (err) {\n          setIsError(true);\n          setIsSuccess(false);\n          setCreateAppModal(false);\n        }\n      },\n    }),\n    [apiProducts]\n  );\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Hello',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    whatsAppDocs: process.env.REACT_APP_FA_WABSP_API_DOCUMANTATION ?? '',\n    connectForm: process.env.REACT_APP_IP_PORTAL_FORM ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  return (\n    <>\n      {!urls.header || !urls.whatsAppDocs || !urls.connectForm || !urls.table || loading ? (\n        <Loading isLoading={true} />\n      ) : (\n        <MainContainer>\n          <FeatureAppLoader\n            featureAppId='fa-header-wbsp-api'\n            src={urls.header}\n            moduleType=''\n            config={HeaderData}\n            onError={(error: unknown): unknown => error}\n          >\n            {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n              return error ? (\n                <Col\n                  style={{\n                    // display: loading ? 'none' : 'flex',\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  <ErrorUi productName={'Whatsapp BSP API Header'} />\n                </Col>\n              ) : (\n                <Col\n                  style={{\n                    // display: loading ? 'none' : 'flex',\n                    flex: '1',\n                    width: '100%',\n                    padding: '0px',\n                  }}\n                  $xs={0}\n                >\n                  {featureAppNode}\n                </Col>\n              );\n            }}\n          </FeatureAppLoader>\n\n          <BSPBanner>\n            <BSPInnerBanner>\n              <BannerHeader>Getting started with our WhatsApp BSP API</BannerHeader>\n              <BannerText data-testid='text'>\n                Unlock the power of WhatsApp with our API—seamless integration, scalable messaging,\n                and enterprise-ready tools for developers.\n              </BannerText>\n            </BSPInnerBanner>\n            <img src={process.env.REACT_APP_ASSETS_URL + 'Rubyverse/image-3_2.webp'} alt='banner' />\n          </BSPBanner>\n\n          <TabsComponent\n            $isInverted={false}\n            defaultValue={(location.state as any)?.activeTab || 'docs'}\n          >\n            <TabList style={{ width: '21.375rem', marginBottom: '1.5rem' }}>\n              <TabTrigger label='API Documentation' value='docs' $isInverted={false} />\n              <TabTrigger label='API Key' value='key' $isInverted={false} />\n            </TabList>\n            <TabContents>\n              <BannerContainer>\n                <GlobalStyles />\n                <FeatureAppLoader\n                  featureAppId='fa-bayobab-documantation'\n                  src={urls.whatsAppDocs}\n                  moduleType=''\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Api Documantation'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </BannerContainer>\n            </TabContents>\n\n            <TabContents>\n              {!isVerified && (\n                <HeroBanenr>\n                  <HeroContent>\n                    <TextContent>\n                      <Text $colour='full' $fontStyle='title-large-bold'>\n                        You do not have an API developer account\n                      </Text>\n                      <Text $fontStyle='body-small-regular'>\n                        Only users with an API developer account can generate API keys.\n                      </Text>\n                    </TextContent>\n                    <StandardButton\n                      label='Become An API Developer'\n                      onClick={() => setFormModal(true)}\n                    />\n                  </HeroContent>\n                  <img\n                    src={process.env.REACT_APP_ASSETS_URL + 'Rubyverse/api-dev-bg.webp'}\n                    alt='dev banner'\n                  />\n                </HeroBanenr>\n              )}\n              {isVerified && (\n                <div style={{ backgroundColor: 'white', gap: '8px', borderRadius: '16px' }}>\n                  {newlyRegistered && (\n                    <div style={{ marginLeft: '40px', marginRight: '40px', paddingTop: '40px' }}>\n                      <InlineNotification\n                        $colourType='success'\n                        title='Your API developer account has been approved.'\n                        descriptionText='Start generating keys and building.'\n                        showNotification={showNotification}\n                        isDismissable={true}\n                        onShow={() => {}}\n                        $isStacked={true}\n                        onClose={() => {\n                          setNewlyRegistered(false);\n                          setShowNotification(false);\n                        }}\n                      />\n                    </div>\n                  )}\n                  <div\n                    style={{\n                      display: 'flex',\n                      flexDirection: 'row',\n                      alignItems: 'center',\n                      justifyContent: 'space-between',\n                      padding: '40px',\n                    }}\n                  >\n                    <div>\n                      <Text $fontStyle={'title-large-bold'} color='text-embed-text-colour'>\n                        API Apps\n                      </Text>\n                      <Text $fontStyle={'body-small-regular'} color='text-colour-tertiary'>\n                        Generate and manage API keys for your apps\n                      </Text>\n                    </div>\n                    <StandardButton\n                      label='Create App'\n                      onClick={() => {\n                        setCreateAppModal(true);\n                      }}\n                    />\n                  </div>\n\n                  <FAQCard />\n                  <FeatureAppLoader\n                    featureAppId='fa-cards-table'\n                    src={urls.table}\n                    moduleType=''\n                    config={{\n                      data: appTableData,\n                      isCardsView: false,\n                      columns: columns,\n                      errorType: 'noApps',\n                      showSearchOnly: true,\n                      actionsList: getActionsList({ navigate }),\n                      hasActions: true,\n                    }}\n                    onError={(error: unknown): unknown => error}\n                  >\n                    {({\n                      error,\n                      featureAppNode,\n                      // loading,\n                    }: CustomFeatureAppRenderingParams): ReactElement => {\n                      return error ? (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          <ErrorUi productName={'Service Inventory Table'} />\n                        </Col>\n                      ) : (\n                        <Col\n                          style={{\n                            // display: loading ? 'none' : 'flex',\n                            flex: '1',\n                            width: '100%',\n                            padding: '0px',\n                          }}\n                          $xs={0}\n                        >\n                          {featureAppNode}\n                        </Col>\n                      );\n                    }}\n                  </FeatureAppLoader>\n                </div>\n              )}\n\n              {(formModal || createAppModal) && (\n                <Modal\n                  title={formModal ? 'API Developer Account' : 'Create API App'}\n                  isOpen={formModal || createAppModal}\n                  isDismissible={true}\n                  onOpenChange={(): void => {\n                    setFormModal(false);\n                    setCreateAppModal(false);\n                  }}\n                  $variant={'standard'}\n                  description={\n                    formModal\n                      ? 'Create your developer account to unlock access to API keys and start building with our platform.'\n                      : undefined\n                  }\n                  children={\n                    <>\n                      <ComboButtonsGlobalOverride />\n                      <FeatureAppLoader\n                        featureAppId='fa-api-doc-form'\n                        src={urls.connectForm}\n                        moduleType=''\n                        config={{\n                          data: formModal ? createAccountFormConfig : createAppFormConfig,\n                          userInfo: profile,\n                          isFeedbackForm: false,\n                        }}\n                        onError={(error: unknown) => {\n                          console.error('Error loading form:', error);\n                          return error;\n                        }}\n                      >\n                        {({\n                          error,\n                          featureAppNode,\n                        }: CustomFeatureAppRenderingParams): ReactElement => (\n                          <Col style={{ flex: 1, width: '100%', padding: 0 }} $xs={0}>\n                            {error ? <ErrorUi productName='Request Product' /> : featureAppNode}\n                          </Col>\n                        )}\n                      </FeatureAppLoader>\n                    </>\n                  }\n                ></Modal>\n              )}\n\n              {(isError || isSuccess) && (\n                <Modal\n                  icon={isError ? <Fault /> : <Tick />}\n                  title={\n                    isSuccess\n                      ? 'Your request has been submitted successfully'\n                      : 'Your request has been submitted unsuccessfully'\n                  }\n                  $status={isSuccess ? 'success' : 'error'}\n                  isOpen={isError || isSuccess}\n                  isDismissible={true}\n                  onOpenChange={(): void => {\n                    setFormModal(false);\n                    setIsError(false);\n                    setIsSuccess(false);\n                    setCreateAppModal(false);\n                  }}\n                  $variant={'feedback'}\n                  description={\n                    isSuccess\n                      ? \"API developer request sent. You'll be notified once it's reviewed.\"\n                      : 'Please resubmit your request again'\n                  }\n                  buttons={\n                    isSuccess ? (\n                      <StandardButton\n                        label='Back To Dashboard'\n                        onClick={() => {\n                          setFormModal(false);\n                          setIsError(false);\n                          setIsSuccess(false);\n                          setCreateAppModal(false);\n                        }}\n                      />\n                    ) : (\n                      <StandardButton\n                        label='Try Again'\n                        onClick={() => {\n                          setIsError(false);\n                          setFormModal(true);\n                          setIsSuccess(false);\n                        }}\n                      />\n                    )\n                  }\n                ></Modal>\n              )}\n            </TabContents>\n          </TabsComponent>\n        </MainContainer>\n      )}\n    </>\n  );\n};\n\nexport default WhatsAppAPIPortal;\n","import apiClient from '../../interceptors/auth-interceptor';\n\nexport const getApiDevAccount = async (email: string, correlationId: string): Promise<any> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbsp-api-developer?email=${email}`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n    },\n  });\n\n  return response.data.data;\n};\n","import apiClient from '../../interceptors/auth-interceptor';\n\nexport const getApiProducts = async (email: string, correlationId: string): Promise<any> => {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbsp-api-products`;\n\n  const response = await apiClient.get(url, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n    },\n  });\n\n  return response.data.data.products;\n};\n","import { getAppDetails } from '../../../apis';\n\nexport interface AppTableRow {\n  id: string;\n  name: string;\n  title: string;\n  callBackUrl: string;\n  createdOn: number;\n  apiKey: string;\n  consumerSecret: string;\n  status: string;\n}\n\nexport const getAllAppData = async (\n  email: string,\n  appNames: string[],\n  correlationId: string\n): Promise<AppTableRow[]> => {\n  try {\n    const detailPromises = appNames.map((appName) => getAppDetails(email, appName, correlationId));\n\n    const responses = await Promise.all(detailPromises);\n\n    const tableData = responses.map((data: any) => ({\n      id: data.appId,\n      name: data.name,\n      title: data.name,\n      callBackUrl: data.callbackUrl,\n      createdOn: data.createdAt,\n      apiKey: data.consumerKey,\n      consumerSecret: data.consumerSecret,\n      status: data.status,\n    }));\n\n    return tableData;\n  } catch (err) {\n    console.error('Error loading app details:', err);\n    return [];\n  }\n};\n","import apiClient from '../../interceptors/auth-interceptor';\nimport { CreateUserRequest } from '../../models/create-user-request';\n\nexport async function createApiDev(\n  correlationId: string,\n  email: string,\n  data: CreateUserRequest\n): Promise<any> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbsp-api-developer`;\n\n  const response = await apiClient.post(url, data, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n    },\n  });\n\n  return response.data.data;\n}\n","import { CreateAppRequest } from '../../models';\nimport apiClient from '../../interceptors/auth-interceptor';\n\nexport async function createApp(\n  correlationId: string,\n  email: string,\n  data: CreateAppRequest\n): Promise<any> {\n  const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbsp-apps`;\n  const payload = {\n    ...data,\n    callbackUrl: data.callbackUrl ? encodeURIComponent(data.callbackUrl) : data.callbackUrl,\n  };\n\n  const response = await apiClient.post(url, payload, {\n    headers: {\n      'Content-Type': 'application/json',\n      correlationId,\n      email,\n    },\n  });\n\n  return response.data;\n}\n","import styled, { css, DefaultTheme } from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n`;\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const CampaignWrapper = styled.div`\n  @media only screen and (max-width: 1023px) {\n    padding: 0px 40px 40px 40px;\n  }\n\n  /* @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1023px) {\n    padding: 0px 20px 30px 20px;\n  } */\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n\nexport const HeadingWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n  margin-top: 1.5rem;\n\n  @media (max-width: 768px) {\n    ${({ theme }): DefaultTheme => css`\n      flex-direction: column;\n      align-items: flex-start;\n      gap: ${theme.floats['padding-medium']};\n    `}\n  }\n`;\n\nexport const HeadingContainer = styled.div`\n  ${({ theme }): DefaultTheme => css`\n    display: flex;\n    padding: ${theme.floats['padding-none']};\n    flex-direction: column;\n    align-items: flex-start;\n    gap: ${theme.floats['margin-2xsmall']};\n    align-self: stretch;\n  `}\n`;\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { ComboButtons, StandardButton } from '@mtnkente/paragon-buttons';\nimport { Success } from '@mtnkente/paragon-icons';\nimport { TextInput } from '@mtnkente/paragon-inputs';\nimport { Modal } from '@mtnkente/paragon-overlays';\nimport React, { ReactElement } from 'react';\n\nexport const SendReportModal = ({\n  isOpen,\n  emailAddress,\n  sendEmailReport,\n  setOpenModal,\n  setEmailAddress,\n  setSendEmailReport,\n  error,\n}: any): ReactElement => {\n  const handleEmailInput = (e: React.ChangeEvent<HTMLInputElement>): void => {\n    setEmailAddress(e.target.value);\n  };\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      isDismissible\n      onOpenChange={(): void => {\n        setOpenModal(false);\n      }}\n      buttons={\n        sendEmailReport ? (\n          <StandardButton\n            data-testid={'send-report-done-button'}\n            label='Done'\n            $variant='primary'\n            onClick={(): void => {\n              setOpenModal(false);\n            }}\n          />\n        ) : (\n          <ComboButtons>\n            <StandardButton\n              data-testid={'send-report-send-button'}\n              label='Send'\n              $variant='primary'\n              onClick={(): void => {\n                setSendEmailReport(true);\n              }}\n              disabled={!emailAddress.includes('@') && !emailAddress.includes('.')}\n            />\n            <StandardButton\n              data-testid={'send-report-cancel-button'}\n              label='Cancel'\n              $variant='secondary'\n              onClick={(): void => setOpenModal(false)}\n            />\n          </ComboButtons>\n        )\n      }\n      $variant={sendEmailReport ? 'feedback' : 'standard'}\n      icon={sendEmailReport && <Success />}\n      $status={error ? 'error' : 'success'}\n      title={sendEmailReport && 'Enter Email'}\n      description={\n        sendEmailReport\n          ? 'An email will be sent to your inbox shortly. Please check your spam folder if you don’t see it.'\n          : 'Provide an email address where the failure reasons report will be sent to.'\n      }\n    >\n      {!sendEmailReport && (\n        <TextInput\n          inputMode='text'\n          label={'Email'}\n          placeholder={'Email'}\n          type='text'\n          data-testid='form-report-email'\n          value={emailAddress}\n          onChange={handleEmailInput}\n          // $errorText={emailIDError}\n          // $hasError={!!emailAddress}\n        />\n      )}\n    </Modal>\n  );\n};\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { FeatureAppContainer, HeadingWrapper } from './CampaignsTable.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport { Logout, NewTab, PlusWithCircle, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { useNavigate } from 'react-router-dom';\nimport { CustomerProfile } from '../../../../models';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\nimport { Text } from '@mtnkente/paragon-display';\nimport { StandardButton } from '@mtnkente/paragon-buttons';\nimport {\n  HeadingConatiner,\n  TableContainer,\n} from '../../converge/ServiceInventory/ServiceInventory.style';\nimport { DashboardWrapper, HeaderWrapper } from '../Dashboard/DashboardWbsp.style';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { SendReportModal } from './SendReportModal/SendReportModal';\n\ninterface CampaignsTableProps {\n  // name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  isOpenModal: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst CampaignsTable = ({\n  // name,\n  profile,\n  isSupueruser,\n  logoutF,\n}: CampaignsTableProps): ReactElement => {\n  const { user } = useAuth0();\n  const navigate = useNavigate();\n\n  // const [src, setSrc] = useState<string | null>(null);\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [isSendReportOpen, setIsSendReportOpen] = useState<boolean>(false);\n  const [emailAddress, setEmailAddress] = useState<string>('');\n  const [sendEmailReport, setSendEmailReport] = useState<boolean>(false);\n  const [setEmailRowData] = useState<any>(null);\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const sendReport = (row: any): void => {\n    setIsSendReportOpen(true);\n    setEmailRowData(row);\n    //setSendEmailReport(false);\n  };\n  useEffect(() => {\n    if (sendEmailReport) {\n      // Make API call to send email\n    }\n  }, [sendEmailReport]);\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  // const defaultConfig = useMemo(\n  //   () => ({\n  //     username: name,\n  //     fullName: profile?.fullName,\n  //     emailAddress: profile?.emailAddress,\n  //     companyDetails: profile?.companyDetails?.name,\n  //     isSupueruser: isSupueruser,\n  //     img: user?.picture,\n  //     themeMode: 'light',\n  //     myProfileText: 'My Profile',\n  //     logoutText: 'Logout',\n  //     viewType: 'overview',\n  //     upcomingServicesText: '',\n  //     supportTicketText: '',\n  //     feedbackText: '',\n  //     title: 'Post Login',\n  //     ThemeProvider: 'theme',\n\n  //     imgProfileRailMenuItems: [\n  //       {\n  //         id: '1',\n  //         label: 'View Profile',\n  //         icon: <UserSymbol />,\n  //         redirectUrl: '/profile',\n  //         activeTab: '',\n  //       },\n  //       //   {\n  //       //     id: '2',\n  //       //     label: 'Notification Preferences',\n  //       //     icon: <Notification />,\n  //       //     redirectUrl: '/notification',\n  //       //     activeTab: '',\n  //       //   },\n  //     ],\n  //     company: [\n  //       {\n  //         id: '1',\n  //         label: 'User Management',\n  //         icon: <UserGroup />,\n  //         redirectUrl: '/user-management',\n  //         activeTab: '',\n  //       },\n  //     ],\n  //     logOutState: [\n  //       {\n  //         id: '1',\n  //         label: 'Logout',\n  //         icon: <Logout />,\n  //         redirectUrl: '/',\n  //         activeTab: '',\n  //       },\n  //     ],\n  //     alertStatus: checkUnreadNotifications(notifications),\n\n  //     notifications: {\n  //       type: 'notifications-centre',\n  //       handleDelete: (): void => {},\n  //       handleUpdate: (): void => {},\n  //       markallread: handleAllUpdate,\n  //       notifications: notifications,\n  //     },\n  //     login: logoutF,\n  //   }),\n  //   [name, profile, loading]\n  // );\n\n  // useEffect(() => {\n  //   const fetchData = async (): Promise<void> => {\n  //     const res = await fetch(\n  //       process.env.REACT_APP_FA_SERVICE_INVENTORY + 'fa-main/asset-manifest.json',\n  //       {\n  //         cache: 'no-cache',\n  //       }\n  //     );\n  //     const data = await res.json();\n  //     setSrc(`${process.env.REACT_APP_FA_SERVICE_INVENTORY}fa-main${data['main.js']}`);\n  //   };\n  //   fetchData().catch((error) => {\n  //     console.error('Error fetching data:', error);\n  //   });\n  // }, []);\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Michelle',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Campaigns',\n      title: 'Post Login',\n      backIcon: true,\n      ThemeProvider: 'theme',\n\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const columns = [\n    { key: 'name', label: 'Name', sortable: 'alphabetical' },\n    { key: 'audience', label: 'Audience', sortable: 'numerical' },\n    { key: 'sent', label: 'Sent', sortable: 'numerical' },\n    { key: 'delivered', label: 'Delivered', sortable: 'numerical' },\n    { key: 'read', label: 'Read', sortable: 'numerical' },\n    { key: 'sent', label: 'Status' },\n    { key: 'failed', label: 'Failed', sortable: 'numerical' },\n    {\n      key: 'failureReason',\n      label: 'Failure Reason',\n      render: (row: any): JSX.Element => (\n        <Text as='span' $fontStyle='caption-regular' onClick={() => sendReport(row)}>\n          <NewTab title='View Reports' /> View Reports\n        </Text>\n      ),\n    },\n    { key: 'created', label: 'Created' },\n    // { key: 'serviceLocations', label: 'Service Location(s)' },\n  ];\n\n  const data = [\n    {\n      name: 'Local Promo Push',\n      audience: 18000,\n      sent: 7200,\n      delivered: 7000,\n      read: 6200,\n      failed: 10800, // 5%\n      failureReason: 'View reports',\n      created: '02-01-2024',\n    },\n    {\n      name: 'National Outreach Blast',\n      audience: 250000,\n      sent: 50000,\n      delivered: 50000,\n      read: 9500,\n      failed: 200000, // 4.8%\n      failureReason: 'View reports',\n      created: '05-01-2024',\n    },\n    {\n      name: 'Test Batch A',\n      audience: 95,\n      sent: 90,\n      delivered: 85,\n      read: 40,\n      failed: 5, // 5%\n      failureReason: 'View reports',\n      created: '10-01-2024',\n    },\n    {\n      name: 'Test Batch B',\n      audience: 60,\n      sent: 57,\n      delivered: 52,\n      read: 20,\n      failed: 3, // 5%\n      failureReason: 'View reports',\n      created: '12-01-2024',\n    },\n    {\n      name: 'Pilot Campaign Alpha',\n      audience: 100,\n      sent: 95,\n      delivered: 90,\n      read: 35,\n      failed: 5, // 5%\n      failureReason: 'View reports',\n      created: '15-01-2024',\n    },\n    {\n      name: 'Pilot Campaign Beta',\n      audience: 80,\n      sent: 76,\n      delivered: 70,\n      read: 28,\n      failed: 4, // 5%\n      failureReason: 'View reports',\n      created: '18-01-2024',\n    },\n    {\n      name: 'Limited Audience Test',\n      audience: 50,\n      sent: 48,\n      delivered: 45,\n      read: 18,\n      failed: 2, // 4%\n      failureReason: 'View reports',\n      created: '20-01-2024',\n    },\n    {\n      name: 'Micro Segment Run',\n      audience: 30,\n      sent: 29,\n      delivered: 27,\n      read: 12,\n      failed: 1, // 3%\n      failureReason: 'View reports',\n      created: '22-01-2024',\n    },\n    {\n      name: 'Internal QA Batch 1',\n      audience: 100,\n      sent: 95,\n      delivered: 89,\n      read: 41,\n      failed: 5, // 5%\n      failureReason: 'View reports',\n      created: '24-01-2024',\n    },\n    {\n      name: 'Internal QA Batch 2',\n      audience: 70,\n      sent: 67,\n      delivered: 62,\n      read: 21,\n      failed: 3, // 4.2%\n      failureReason: 'View reports',\n      created: '27-01-2024',\n    },\n  ];\n\n  const handleCreateCampaignClick = (): void => {\n    navigate('/whatsapp-business-messaging/campaign-management/create-new-campaign');\n    // formActions?.clearData();\n    // apiClient?.clearData();\n    sessionStorage.removeItem('persistedFileUpload');\n  };\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.table ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loading && (\n                <FeatureAppLoader\n                  featureAppId='fa-header-campaigns-table'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Campaigns Table Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n\n            <FeatureAppContainer>\n              <TableContainer>\n                <HeadingWrapper>\n                  <HeadingConatiner>\n                    <Text $colour='full' $fontStyle='title-large-bold'>\n                      Campaigns Performance\n                    </Text>\n                    <Text $colour='subtle' $fontStyle='body-small-regular'>\n                      Monitor the performance of your campaigns.\n                    </Text>\n                  </HeadingConatiner>\n                  <StandardButton\n                    icon={<PlusWithCircle />}\n                    label='Create Campaign'\n                    onClick={handleCreateCampaignClick}\n                  />\n                </HeadingWrapper>\n                <FeatureAppLoader\n                  featureAppId='fa-campaigns-table'\n                  src={urls.table}\n                  moduleType=''\n                  config={{\n                    columns: columns,\n                    data: data,\n                    hasActions: false,\n                    // actionsList: actionsList,\n                    isExpandable: false,\n                    isCampaigns: true,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Service Inventory Table'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </TableContainer>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n      <BayobabFonts />\n      <SendReportModal\n        isOpen={isSendReportOpen}\n        sendEmailReport={sendEmailReport}\n        setSendEmailReport={setSendEmailReport}\n        emailAddress={emailAddress}\n        setEmailAddress={setEmailAddress}\n        setOpenModal={setIsSendReportOpen}\n      />\n    </ThemeProvider>\n  );\n};\n\nexport default CampaignsTable;\n","import styled, { DefaultTheme, css } from 'styled-components';\n\nexport const FeatureAppContainer = styled.div`\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n`;\n\nexport const AccordionWrap = styled.div`\n  background: #fff;\n  padding: 48px;\n  border-radius: 24px;\n\n  @media only screen and (max-width: 768px) {\n    margin-bottom: 400px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    margin-bottom: 750px;\n  }\n`;\n\nexport const DashboardWrapper = styled.div`\n  @media only screen and (max-width: 768px) {\n    padding: 20px;\n  }\n\n  @media only screen and (min-width: 769px) and (max-width: 1024px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1025px) and (max-width: 1200px) {\n    padding: 0px 20px 30px 20px;\n  }\n  @media only screen and (min-width: 1201px) {\n    padding: 0px 30px 50px 30px;\n  }\n`;\n\nexport const FaqHeader = styled.div`\n  ${({ theme: { colors, typography } }): DefaultTheme => {\n    return css`\n      color: ${colors['text-embed-text-colour']};\n      ${typography['title-large-bold']};\n      padding-bottom: 30px;\n    `;\n  }}\n`;\n\nexport const HeaderWrapper = styled.div`\n  padding-top: 1.5rem;\n`;\n\nexport const SubTitle = styled.div`\n  ${({ theme: { typography } }): DefaultTheme => {\n    return css`\n      ${typography['body-small-semibold']};\n    `;\n  }}\n`;\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport ErrorUi from '../../../../ErrorUI/ErrorUI';\nimport { DashboardWrapper, FeatureAppContainer, HeaderWrapper } from './Catalogues.style';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useFeatureAppUrls } from '../../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../../Loading/Loading';\nimport { CustomerProfile } from '../../../../models';\nimport { MappedNotification } from '../../../../types/mapped-notification';\nimport { CORRELATION_ID } from '../../../../utils';\nimport { getNotification } from '../../../../apis/get-notification';\nimport { editNotification } from '../../../../apis/edit-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../../utils/map-notification';\n\ninterface CataloguesProps {\n  name: string;\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\nconst Catalogues = ({ name, profile, isSupueruser, logoutF }: CataloguesProps): ReactElement => {\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loadingNot, setloadingNot] = useState<boolean>(true);\n\n  const correlationId = CORRELATION_ID;\n\n  useEffect(() => {\n    setloadingNot(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setloadingNot(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setloadingNot(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  // const logoutF = async (): Promise<void> => {\n  //   await logout({\n  //     logoutParams: { returnTo: window.location.origin, federated: true },\n  //     clientId: process.env.REACT_APP_OKTA_CLIENT as string,\n  //   });\n  //   localStorage.clear();\n  //   sessionStorage.clear();\n  // };\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n    supportTicket: process.env.REACT_APP_SUPPORT_TICKET_URL ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  const HeaderData = useMemo(\n    () => ({\n      username: name,\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'overview',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      overviewText: 'Create Catalogues',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loadingNot, profile]\n  );\n\n  // const Data = {\n  //   themeMode: 'light',\n  //   title: 'Need Help? Log a Ticket',\n  //   bodyText:\n  //     'Need help with something specific? Log a support ticket to get assistance from our dedicated team. Provide details about your issue or request, and we’ll ensure it’s addressed promptly.',\n  //   img: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/log support ticket.jpg',\n  //   backgroundImg: process.env.REACT_APP_ASSETS_URL + 'Support-Ticket/top-graphic@2x.png',\n  //   url: process.env.REACT_APP_LOG_SUPPORT_URL,\n  // };\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      {!urls.header || !urls.supportTicket ? (\n        <Loading isLoading={true} />\n      ) : (\n        <DashboardWrapper data-testid='dashboard-app-container'>\n          <div data-testid='dashboard-shell-container'>\n            <HeaderWrapper>\n              {!loadingNot && (\n                <FeatureAppLoader\n                  featureAppId='fa-support-and-faq-header'\n                  src={urls.header}\n                  moduleType=''\n                  config={HeaderData}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Whatsapp BSP Header'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              )}\n            </HeaderWrapper>\n            <FeatureAppContainer>\n              <FeatureAppLoader\n                featureAppId='fa-log-support-and-faq-create-flows'\n                src={urls.supportTicket}\n                config={{ isCreateFlow: false, isCatalogues: true }}\n                moduleType=''\n                onError={(error: unknown): unknown => error}\n              >\n                {({\n                  error,\n                  featureAppNode,\n                  // loading,\n                }: CustomFeatureAppRenderingParams): ReactElement => {\n                  return error ? (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      <ErrorUi productName={'Quick Quotes Help Menu'} />\n                    </Col>\n                  ) : (\n                    <Col\n                      style={{\n                        // display: loading ? 'none' : 'flex',\n                        flex: '1',\n                        width: '100%',\n                        padding: '0px',\n                      }}\n                      $xs={0}\n                    >\n                      {featureAppNode}\n                    </Col>\n                  );\n                }}\n              </FeatureAppLoader>\n            </FeatureAppContainer>\n          </div>\n        </DashboardWrapper>\n      )}\n    </ThemeProvider>\n  );\n};\n\nexport default Catalogues;\n","import React, { ReactElement } from 'react';\nimport { InfoCard, InfoHeaderRow, InfoWrapper } from './ApiDocumentation.styles';\nimport { MyProducts, NewTab } from '@mtnkente/paragon-icons';\nimport { Text } from '@mtnkente/paragon-display';\nimport { Divider } from '@mtnkente/paragon-layouts';\n\ninterface InfoCardProps {\n  callBackURL: string;\n  apiProducts: { apiproduct: string; status: string }[];\n  //   environment: string;\n}\n\nexport const InfoCardComponent = ({ callBackURL, apiProducts }: InfoCardProps): ReactElement => {\n  return (\n    <InfoWrapper>\n      <InfoCard>\n        <InfoHeaderRow>\n          <NewTab />\n          <Text $fontStyle={'caption-regular'}>Callback URL</Text>\n        </InfoHeaderRow>\n        <Divider $variant={'subtle'} />\n        <Text $fontStyle={'label-large-bold'} style={{ paddingTop: '16px' }}>\n          {callBackURL}\n        </Text>\n      </InfoCard>\n      <InfoCard style={{ marginTop: '24px' }}>\n        <InfoHeaderRow>\n          <MyProducts />\n          <Text $fontStyle={'caption-regular'}>API Product</Text>\n        </InfoHeaderRow>\n        <Divider $variant={'subtle'} />\n        <Text $fontStyle={'label-large-bold'} style={{ paddingTop: '16px' }}>\n          {apiProducts.map((p) => p.apiproduct).join(', ')}\n        </Text>\n      </InfoCard>\n\n      {/* <InfoGrid>\n        <InfoCard>\n          <InfoHeaderRow>\n            <Explore />\n            <Text $fontStyle={'caption-regular'}>Environment</Text>\n          </InfoHeaderRow>\n          <Divider $variant={'subtle'} />\n          <Text $fontStyle={'label-large-bold'} style={{ paddingTop: '16px' }}>\n            {environment}\n          </Text>\n        </InfoCard>\n      </InfoGrid> */}\n    </InfoWrapper>\n  );\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\n/* eslint-disable react/no-children-prop */\n\nimport React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Col } from '@mtnkente/paragon-foundation';\nimport { Text } from '@mtnkente/paragon-display';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport { MainContainer } from './ApiDocumentation.styles';\nimport ErrorUi from '../../../ErrorUI/ErrorUI';\nimport { createGlobalStyle } from 'styled-components';\nimport { ChevronLeft, Logout, UserGroup, UserSymbol } from '@mtnkente/paragon-icons';\nimport { CustomerProfile } from '../../../models';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { getNotification } from '../../../apis/get-notification';\nimport { CORRELATION_ID } from '../../../utils';\nimport { MappedNotification } from '../../../types/mapped-notification';\nimport { checkUnreadNotifications, formatDateLabel } from '../../../utils/map-notification';\nimport { editNotification } from '../../../apis/edit-notification';\nimport { useFeatureAppUrls } from '../../../hooks/use-fetch-feature-app-urls';\nimport Loading from '../../../Loading/Loading';\nimport { apiViewColumns } from './ApiPortalTable.config';\nimport { InfoCardComponent } from './InfoCard';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { getAppDetails } from '../../../apis';\n\nconst GlobalStyles = createGlobalStyle`\n  .sc-klYcpz.limFAJ {\n    display: none !important;\n  }\n`;\n\ninterface DashboardProps {\n  profile?: CustomerProfile;\n  isSupueruser: boolean;\n  logoutF?: () => Promise<void>;\n}\n\nconst WhatsAppAPIsView = ({ profile, isSupueruser, logoutF }: DashboardProps): ReactElement => {\n  const navigate = useNavigate();\n  const { user } = useAuth0();\n  const [notifications, setNotifications] = useState<MappedNotification[]>([]);\n  const [loading, setLoading] = useState<boolean>(true);\n  const correlationId = CORRELATION_ID;\n  const { appName } = useParams();\n  const [data, setData] = useState<any>(null);\n  const email = user?.email?.toLowerCase() ?? '';\n\n  useEffect(() => {\n    if (appName) {\n      getAppDetails(email, appName, correlationId).then(setData).catch(console.error);\n    }\n  }, [appName]);\n\n  useEffect(() => {\n    setLoading(true);\n\n    const fetchNotifications = (): void => {\n      getNotification(correlationId)\n        .then((response) => {\n          setNotifications(\n            response.data.map((item, index) => ({\n              id: index + 1,\n              category: item?.productType,\n              messageId: item?.messageId,\n              title: item?.title,\n              body: item?.message,\n              timestamp: formatDateLabel(item?.additionalData?.timestamp),\n              status: item.status ? item.status : item?.additionalData?.status,\n            }))\n          );\n\n          setLoading(false);\n        })\n        .catch((error) => {\n          console.error('Error fetching notifications:', error);\n          setLoading(false);\n        });\n    };\n\n    fetchNotifications();\n  }, []);\n\n  const handleAllUpdate = (): void => {\n    if (!Array.isArray(notifications) || notifications.length === 0) {\n      return;\n    }\n\n    const messageIds = notifications.map((item) => item.messageId).filter((id) => id);\n\n    messageIds.forEach((messageId) => {\n      editNotification(correlationId, messageId, 'read')\n        .then(() => {})\n        .catch((error) => {\n          console.error(`Error updating notification ${messageId}:`, error);\n        });\n    });\n  };\n\n  const HeaderData = useMemo(\n    () => ({\n      username: 'Hello',\n      fullName: profile?.fullName,\n      emailAddress: profile?.emailAddress,\n      companyDetails: profile?.companyDetails?.name,\n      isSupueruser: isSupueruser,\n      img: user?.picture,\n      themeMode: 'light',\n      myProfileText: 'My Profile',\n      logoutText: 'Logout',\n      viewType: 'networkTools',\n      upcomingServicesText: '',\n      supportTicketText: '',\n      feedbackText: '',\n      title: 'Post Login',\n      ThemeProvider: 'theme',\n      imgProfileRailMenuItems: [\n        {\n          id: '1',\n          label: 'View Profile',\n          icon: <UserSymbol />,\n          redirectUrl: '/profile',\n          activeTab: '',\n        },\n        //   {\n        //     id: '2',\n        //     label: 'Notification Preferences',\n        //     icon: <Notification />,\n        //     redirectUrl: '/notification',\n        //     activeTab: '',\n        //   },\n      ],\n      company: [\n        {\n          id: '1',\n          label: 'User Management',\n          icon: <UserGroup />,\n          redirectUrl: '/user-management',\n          activeTab: '',\n        },\n      ],\n      logOutState: [\n        {\n          id: '1',\n          label: 'Logout',\n          icon: <Logout />,\n          redirectUrl: '/',\n          activeTab: '',\n        },\n      ],\n      alertStatus: checkUnreadNotifications(notifications),\n\n      notifications: {\n        type: 'notifications-centre',\n        handleDelete: (): void => {},\n        handleUpdate: (): void => {},\n        markallread: handleAllUpdate,\n        notifications: notifications,\n      },\n\n      login: logoutF,\n    }),\n    [loading, profile]\n  );\n\n  const envs = {\n    header: process.env.REACT_APP_FA_HEADER_URL ?? '',\n\n    table: process.env.REACT_APP_FA_SERVICE_INVENTORY ?? '',\n  };\n\n  const urls = useFeatureAppUrls(envs, 'main.js');\n\n  return (\n    <>\n      {!urls.header || !urls.table || !data ? (\n        <Loading isLoading={true} />\n      ) : (\n        <>\n          <MainContainer>\n            <FeatureAppLoader\n              featureAppId='fa-header-wbsp-api'\n              src={urls.header}\n              moduleType=''\n              config={HeaderData}\n              onError={(error: unknown): unknown => error}\n            >\n              {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n                return error ? (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    <ErrorUi productName={'Whatsapp BSP API Header'} />\n                  </Col>\n                ) : (\n                  <Col\n                    style={{\n                      // display: loading ? 'none' : 'flex',\n                      flex: '1',\n                      width: '100%',\n                      padding: '0px',\n                    }}\n                    $xs={0}\n                  >\n                    {featureAppNode}\n                  </Col>\n                );\n              }}\n            </FeatureAppLoader>\n\n            <>\n              <div\n                role='button'\n                tabIndex={0}\n                style={{\n                  display: 'flex',\n                  flexDirection: 'row',\n                  cursor: 'pointer',\n                  gap: '8px',\n                }}\n                onClick={(e) => {\n                  e.preventDefault();\n                  window.scrollTo(0, 0);\n                  navigate('/whatsapp-bsp', { state: { activeTab: 'key' } });\n                }}\n                onKeyDown={(e) => {\n                  if (e.key === 'Enter' || e.key === ' ') {\n                    e.preventDefault();\n                    window.scrollTo(0, 0);\n                    navigate('/whatsapp-bsp', { state: { activeTab: 'key' } });\n                  }\n                }}\n              >\n                <ChevronLeft />\n                <Text $fontStyle={'label-large-regular'} color='text-embed-text-colour'>\n                  API App\n                </Text>\n              </div>\n              <div style={{ backgroundColor: 'white', gap: '8px', borderRadius: '16px' }}>\n                <div\n                  style={{\n                    display: 'flex',\n                    flexDirection: 'row',\n                    alignItems: 'center',\n                    justifyContent: 'space-between',\n                    padding: '40px',\n                  }}\n                >\n                  <div>\n                    <Text $fontStyle={'title-large-bold'} color='text-embed-text-colour'>\n                      {data.name}\n                    </Text>\n                  </div>\n                </div>\n                {/* Add App Info here  */}\n                <InfoCardComponent\n                  callBackURL={data.callbackUrl}\n                  apiProducts={data.credentials[0].apiProducts}\n                />\n\n                <FeatureAppLoader\n                  featureAppId='fa-test-apis'\n                  src={urls.table}\n                  moduleType=''\n                  config={{\n                    columns: apiViewColumns,\n                    data: [\n                      {\n                        id: data.appId,\n                        name: data.name,\n                        title: data.name,\n                        callBackUrl: data.callbackUrl,\n                        createdOn: data.createdAt,\n                        apiKey: data.credentials[0].consumerKey,\n                        consumerSecret: data.credentials[0].consumerSecret,\n                        status: data.status,\n                      },\n                    ],\n                    hasActions: false,\n                    // isExpandable: true,\n                    // hasError: true,\n                  }}\n                  onError={(error: unknown): unknown => error}\n                >\n                  {({\n                    error,\n                    featureAppNode,\n                    // loading,\n                  }: CustomFeatureAppRenderingParams): ReactElement => {\n                    return error ? (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        <ErrorUi productName={'Service Inventory Table'} />\n                      </Col>\n                    ) : (\n                      <Col\n                        style={{\n                          // display: loading ? 'none' : 'flex',\n                          flex: '1',\n                          width: '100%',\n                          padding: '0px',\n                        }}\n                        $xs={0}\n                      >\n                        {featureAppNode}\n                      </Col>\n                    );\n                  }}\n                </FeatureAppLoader>\n              </div>\n            </>\n          </MainContainer>\n        </>\n      )}\n    </>\n  );\n};\n\nexport default WhatsAppAPIsView;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport { Container, Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { MyDashboard } from './components/authorization/customerportal/Dashboard/Dashboard';\nimport { Route, Routes, useLocation } from 'react-router-dom';\nimport reportWebVitals from '../report-web-vitals';\nimport { miscTracking } from '@mtnkente/gtm';\nimport { Metric } from 'web-vitals';\nimport { FeatureAppLoader } from '@feature-hub/react';\nimport { Helmet } from 'react-helmet';\nimport LogSupportTicket from './components/authorization/customerportal/LogSupportTicket/LogSupportTicket';\nimport ProvideFeedback from './components/authorization/customerportal/ProvideFeedback/ProvideFeedback';\nimport UpcomingServices from './components/authorization/customerportal/UpcomingServices/UpcomingServices';\nimport { Wrapper } from './App.styled';\nimport { config } from './types/NavSidebar';\nimport LandingPage from './components/unauthorization/IpPortal/WelcomePage/LandingPage';\nimport Header from './components/unauthorization/IpPortal/NavBar/Header';\nimport Footer from './components/unauthorization/IpPortal/Footer/Footer';\nimport LookingGlass from './components/unauthorization/IpPortal/LookingGlass/LookingGlass';\nimport PeeringPolicy from './components/unauthorization/IpPortal/PeeringPolicy/PeeringPolicy';\nimport { DashboardWbsp } from './components/authorization/whatsappBsp/Dashboard/DashboardWbsp';\nimport MessageTemplates from './components/authorization/whatsappBsp/MessageTemplates/MessageTemplates';\nimport LatencyMatrix from './components/authorization/latencyMatrix/LatencyMatrix';\nimport Profile from './components/authorization/globalComponents/ProfilePage/Profile';\nimport OverviewPage from './components/authorization/QuickQuotes/OverviewPage/QuickQuotesDashboard';\nimport { SavedQuotes } from './components/authorization/QuickQuotes/SavedQuotes/SavedQuotes';\nimport QuickQuoteSupportTicket from './components/authorization/QuickQuotes/quickQuoteSupportTicket/QuickQuoteSupportTicket';\nimport { DetailsTable } from './components/authorization/QuickQuotes/DetailsTable/DetailsTable';\nimport Disclaimer from './components/authorization/latencyMatrix/Disclaimer';\nimport { ProductPage } from './components/authorization/QuickQuotes/ProductList/ProductPage';\nimport Error404 from './Error';\nimport { CustomiseProduct } from './components/authorization/QuickQuotes/CustomiseProduct/CustomiseProduct';\nimport TermsAndConditions from './components/authorization/QuickQuotes/TermsAndConditions/TermsAndConditions';\nimport { SendAnEmail } from './components/authorization/QuickQuotes/SendAnEmail/SendAnEmail';\nimport { RequestQuote } from './components/authorization/QuickQuotes/CustomiseProduct/RequestQuote';\nimport { useProfile } from './utils/ProfileProvider';\nimport CampaignManagement from './components/authorization/whatsappBsp/Campaigns/Campaigns';\nimport SupportAndFaqs from './components/authorization/whatsappBsp/SupportAndFaqs/SupportAndFaqs';\nimport AccountManagement from './components/authorization/whatsappBsp/AccountManagement/AccountManagement';\nimport Terms from './components/unauthorization/IpPortal/Terms/Terms';\nimport Privacy from './components/unauthorization/IpPortal/Privacy/Privacy';\nimport ApiDocumentation from './components/unauthorization/IpPortal/WhatsappDoc/ApiDocumentation';\nimport PeeringList from './components/unauthorization/IpPortal/PeeringPolicy/PeeringList';\nimport PeeringRequest from './components/unauthorization/IpPortal/PeeringPolicy/PeeringRequest';\nimport { BayobabFonts } from '@mtnkente/paragon-bayobab-fonts';\nimport ConvergeDashboard from './components/authorization/converge/Dashboard/ConvergeDashboard';\nimport { LookingGlassPortal } from './components/authorization/customerportal/networkTools/LookingGlassPortal';\nimport NotificationsCentre from './components/authorization/CentralNotifications/CentralNotifications';\nimport { ServiceInventory } from './components/authorization/converge/ServiceInventory/ServiceInventory';\nimport { SendConvergeEmail } from './components/authorization/converge/SendAnEmail/SendAnEmail';\nimport SupportTicket from './components/authorization/converge/convergeSupportTicket/SupportTicket';\nimport { PeeringListPortal } from './components/authorization/customerportal/networkTools/PeeringListPortal';\nimport { PeeringPolicyPortal } from './components/authorization/customerportal/networkTools/PeeringPolicyPortal';\nimport { PeeringRequestPortal } from './components/authorization/customerportal/networkTools/PeeringRequestPortal';\nimport { getTitle } from './utils/get-title';\nimport { getDescription } from './utils/get-description';\nimport TechnicalSpecificationsForm from './components/authorization/converge/TechnicalSpecificationsFormPage/TechnicalSpecificationsForm';\nimport { CreateUser } from './components/authorization/userManagement/createUser/CreateUser';\nimport { ServiceRequest } from './components/authorization/converge/ServiceRequest/ServiceRequest';\nimport { UserManagement } from './components/authorization/userManagement/userManagementTable/UserManagement';\nimport { ServiceRequestTable } from './components/authorization/converge/ServiceRequestTable/ServiceRequestTable';\nimport { ServiceRequestSelection } from './components/authorization/converge/ServiceRequest/ServiceRequestSelection';\nimport {\n  CONVERGE_PAGE,\n  CONVERGE_REPORTS_PAGE,\n  CORRELATION_ID,\n  FEEDBACK_BUTTON_HIDDEN_PATHS,\n  FEEDBACK_PAGE,\n  IPX_ANALYTICS_PAGE,\n  LATENCY_MATRIX_PAGE,\n  QUICK_QUOTES_PAGE,\n} from './utils';\nimport { initGA, setUser, trackEvent, trackPage } from '../analytics';\nimport QuickQuotesBasicForm from './components/authorization/converge/QuickQuotesBasicForm/QuickQuotesBasicForm';\nimport { EditUserDetails } from './components/authorization/userManagement/editUserDetails/EditUserDetails';\nimport CustomerSupport from './components/unauthorization/IpPortal/CustomerSupport/CustomerSupport';\nimport Loading from './Loading/Loading';\nimport { Analytics } from './components/authorization/whatsappBsp/Analytics/Analytics';\nimport FeedbackButtonComponent from './components/authorization/feedback/FeedbackButton';\nimport FeedbackModal from './components/authorization/feedback/feedbackModal/FeedbackModal';\nimport { useFetchSubmissions } from './hooks/use-fetch-submissions';\nimport { useLogoutWithFeedback } from './hooks/use-logout';\nimport { useShouldShowFeedback } from './utils/get-submission-period';\nimport CreateFlows from './components/authorization/whatsappBsp/CreateFlows/CreateFlows';\nimport ReportingDashboard from './components/authorization/IPReporting/Dashboard/ReportingDashboard';\nimport { ProductReport } from './components/authorization/IPReporting/ProductReport/ProductReport';\nimport ReportingAnalytics from './components/authorization/IPReporting/ReportingAnalytics/ReportingAnalytics';\nimport WhatsAppAPIPortal from './components/authorization/whatsappAPI/ApiDocumentation';\nimport CampaignsTable from './components/authorization/whatsappBsp/CampaignsTable/CampaignsTable';\nimport Catalogues from './components/authorization/whatsappBsp/Catalogues/Catalogues';\nimport WhatsAppAPIsView from './components/authorization/whatsappAPI/ApisView';\n\ninterface NavBarProps {\n  userActiveServices: Array<string | undefined>;\n}\n\nexport const NavBar = ({ userActiveServices }: NavBarProps): ReactElement => {\n  const { retrievedProfile } = useProfile();\n  const hasConvergeService = retrievedProfile?.isFixed;\n\n  useEffect(() => {}, [userActiveServices, retrievedProfile?.isFixed, hasConvergeService]);\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(process.env.REACT_APP_FA_NAVBAR_URL + 'fa-main/asset-manifest.json', {\n        cache: 'no-cache',\n      });\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_FA_NAVBAR_URL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <FeatureAppLoader\n        featureAppId='fa-dynamic-navigation'\n        src={src}\n        moduleType=''\n        config={{\n          themeMode: config.themeMode,\n          footer: config.footer,\n          userActiveServices: userActiveServices,\n          hiddenPaths: [\n            FEEDBACK_PAGE,\n            IPX_ANALYTICS_PAGE,\n            QUICK_QUOTES_PAGE,\n            !hasConvergeService ? CONVERGE_PAGE : '',\n            CONVERGE_REPORTS_PAGE,\n            LATENCY_MATRIX_PAGE,\n          ],\n        }}\n      />\n      <BayobabFonts />\n    </ThemeProvider>\n  );\n};\n\nexport const App = (): ReactElement => {\n  const {\n    retrievedProfile,\n    isAuthenticated,\n    userName,\n    userActiveServices,\n    userServiceInventory,\n    serviceRequests,\n  } = useProfile();\n  const [isNavMenuOpen, setIsMenuOpen] = useState(false);\n  const [isSupueruser, setIsSupueruser] = useState<boolean>(false);\n  const [isOpenModal, setIsOpenModal] = useState<boolean>(true);\n  const [isFeedbackVisible, setIsFeedbackVisible] = useState<boolean>(false);\n  const [submissions, updateSubmissions] = useState<any[]>([]);\n  const location = useLocation();\n  const isNetworkTools = location.pathname.includes('/network-tools');\n  const isPeering = location.pathname.includes('/peering-information');\n  const isWhatsAppAPI =\n    location.pathname.includes('/whatsapp-bsp') || location.pathname.includes('docs');\n  const isNetworkToolsPage = isNetworkTools || isPeering || isWhatsAppAPI;\n  const serviceNum = userServiceInventory?.length ?? 0;\n  const requestsNum = serviceRequests?.length ?? 0;\n  const draftsNum = serviceRequests?.filter((request) => request.status === 'Draft').length ?? 0;\n  const hideFeedbackButton = FEEDBACK_BUTTON_HIDDEN_PATHS.includes(location.pathname);\n  // const hideFeedbackButton = false;\n\n  const correlationId = CORRELATION_ID;\n  useFetchSubmissions({\n    correlationId,\n    updateSubmissions,\n    isAuthenticated,\n  });\n\n  const shouldShowLogoutFeedback = useShouldShowFeedback(submissions, 'logout');\n\n  const { logoutF, continueLogout } = useLogoutWithFeedback(\n    shouldShowLogoutFeedback,\n    setIsFeedbackVisible,\n    submissions\n  );\n\n  useEffect(() => {\n    initGA();\n  }, []);\n\n  useEffect(() => {\n    trackPage(location.pathname);\n\n    if (!isAuthenticated) {\n      trackPage('Landing_Page_Visit');\n    }\n    if (retrievedProfile?.companyDetails?.name) {\n      setUser(retrievedProfile?.companyDetails?.name);\n    }\n\n    setIsSupueruser(\n      (retrievedProfile?.portalFixedAdministrator ?? false) ||\n        (retrievedProfile?.portalWholesaleAdministrator ?? false)\n    );\n  }, [location]);\n\n  useEffect(() => {\n    setIsSupueruser(\n      (retrievedProfile?.portalFixedAdministrator ?? false) ||\n        (retrievedProfile?.portalWholesaleAdministrator ?? false)\n    );\n\n    setIsOpenModal(false);\n    const observer = new MutationObserver(() => {\n      const isTextVisible = document.body.textContent?.includes('Platform version');\n      setIsMenuOpen(!!isTextVisible);\n    });\n\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true,\n    });\n\n    return (): void => observer.disconnect();\n  }, [\n    retrievedProfile,\n    retrievedProfile?.portalFixedAdministrator,\n    retrievedProfile?.portalWholesaleAdministrator,\n  ]);\n\n  return (\n    <>\n      <Helmet>\n        <title>{getTitle(location.pathname)}</title>\n        <meta name='description' content={getDescription(location.pathname)} />\n      </Helmet>\n      {!isAuthenticated ? (\n        <>\n          <Header />\n          <Routes>\n            <Route path='' element={<LandingPage />} />\n            <Route path='/' element={<LandingPage />} />\n            <Route path='looking-glass' element={<LookingGlass />} />\n            <Route path='privacy-notice' element={<Privacy />} />\n            <Route path='frequently-asked-questions' element={<CustomerSupport />} />\n            <Route path='terms-of-use' element={<Terms />} />\n            <Route path='wabsp-api-doc' element={<ApiDocumentation />} />\n            <Route path='/docs/*' element={<ApiDocumentation />} />\n            <Route path='peering-information/policy' element={<PeeringPolicy />} />\n            <Route path='peering-information/list' element={<PeeringList />} />\n            <Route path='peering-information/request' element={<PeeringRequest />} />\n\n            <Route path='*' element={<Error404 />} />\n          </Routes>\n          {location.pathname !== '' &&\n            location.pathname !== '/' &&\n            location.pathname !== '/wabsp-api-doc' &&\n            !location.pathname.startsWith('/docs/reach') && <Footer />}\n        </>\n      ) : (\n        <ThemeProvider mode='light' platform='bayobab'>\n          {!retrievedProfile ? (\n            <Loading isLoading={true} />\n          ) : (\n            <>\n              {!isNetworkToolsPage && <NavBar userActiveServices={userActiveServices} />}\n              {/* {isOpenModal && <ModalRole handleNominationResponse={handleNominationResponse} />} */}\n              <Container style={{ padding: '0px', margin: '0px' }}>\n                <Wrapper isMenuOpen={isNavMenuOpen}>\n                  {!hideFeedbackButton && <FeedbackButtonComponent profile={retrievedProfile} />}\n                  {isFeedbackVisible && (\n                    <FeedbackModal\n                      isVisible={!!isFeedbackVisible}\n                      setIsVisible={setIsFeedbackVisible}\n                      profile={retrievedProfile}\n                      continueLogout={continueLogout}\n                    />\n                  )}\n                  <Col $xs={12} $m={12} $l={12} $xl={12} style={{ padding: 0 }}>\n                    <Routes>\n                      {/** customer portal */}\n                      <Route\n                        path=''\n                        element={\n                          <MyDashboard\n                            name={userName}\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            isOpenModal={isOpenModal}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='dashboard'\n                        element={\n                          <MyDashboard\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            isOpenModal={isOpenModal}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {isSupueruser && (\n                        <>\n                          <Route\n                            path='user-management/create-user'\n                            element={\n                              <CreateUser\n                                name={userName}\n                                isSupueruser={isSupueruser}\n                                profile={retrievedProfile}\n                                isOpenModal={isOpenModal}\n                                logoutF={logoutF}\n                              />\n                            }\n                          />\n                          <Route\n                            path='user-management/edit-user'\n                            element={\n                              <EditUserDetails\n                                name={userName}\n                                isSupueruser={isSupueruser}\n                                profile={retrievedProfile}\n                                isOpenModal={isOpenModal}\n                                logoutF={logoutF}\n                              />\n                            }\n                          />\n\n                          <Route\n                            path='user-management'\n                            element={\n                              <UserManagement\n                                isSupueruser={isSupueruser}\n                                profile={retrievedProfile}\n                                name={''}\n                                logoutF={logoutF}\n                              />\n                            }\n                          />\n                        </>\n                      )}\n                      {/* <Route path='user-management' element={<UserManagement />} /> */}\n                      <Route\n                        path='notifications-overview'\n                        element={\n                          <NotificationsCentre\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n\n                      <Route\n                        path='overview'\n                        element={\n                          <DashboardWbsp\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging'\n                        element={\n                          <DashboardWbsp\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='network-tools/latency-matrix'\n                        element={\n                          <LatencyMatrix\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-bsp'\n                        element={\n                          <WhatsAppAPIPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='/docs/*'\n                        element={\n                          <WhatsAppAPIPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-bsp-apis/:appName'\n                        element={\n                          <WhatsAppAPIsView\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/overview'\n                        element={\n                          <OverviewPage\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/message-templates'\n                        element={\n                          <MessageTemplates\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/catalogues'\n                        element={\n                          <Catalogues\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/message-analytics'\n                        element={\n                          <Analytics\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/message-templates/create-template'\n                        element={\n                          <MessageTemplates\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/create-flows'\n                        element={\n                          <CreateFlows\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/* <Route\n                        path='whatsapp-business-messaging/message-templates/create-template'\n                        element={\n                          <MessageTemplates\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      /> */}\n                      <Route\n                        path='log-support-ticket'\n                        element={\n                          <LogSupportTicket\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/support-faqs'\n                        element={\n                          <QuickQuoteSupportTicket\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/saved-quotes'\n                        element={\n                          <SavedQuotes\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/saved-quotes/quote-details'\n                        element={\n                          <DetailsTable\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='feedback'\n                        element={\n                          <ProvideFeedback\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='upcoming-services'\n                        element={\n                          <UpcomingServices\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/** WhatsappBSP */}\n                      <Route\n                        path='overview'\n                        element={\n                          <DashboardWbsp\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging'\n                        element={\n                          <DashboardWbsp\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/campaign-management/create-new-campaign'\n                        element={\n                          <CampaignManagement\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            isOpenModal={false}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/campaign-management'\n                        element={\n                          <CampaignsTable\n                            name={userName}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            isOpenModal={false}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/* <Route\n                        path='whatsapp-business-messaging/message-analytics'\n                        element={\n                          <Analytics isSupueruser={isSupueruser} profile={retrievedProfile} />\n                        }\n                      /> */}\n                      <Route\n                        path='whatsapp-business-messaging/support-&-faqs'\n                        element={\n                          <SupportAndFaqs\n                            name={userName}\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='whatsapp-business-messaging/account-management'\n                        element={\n                          <AccountManagement\n                            name={userName}\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='/whatsapp-business-messaging/email-support'\n                        element={\n                          <SendAnEmail\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n\n                      {/** Quick Quotes */}\n                      <Route\n                        path='quick-quotes'\n                        element={\n                          <OverviewPage\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/terms-and-conditions'\n                        element={\n                          <TermsAndConditions\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/add-product'\n                        element={\n                          <ProductPage\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product'\n                        element={\n                          <CustomiseProduct\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/* products routes */}\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/l2vpn'\n                        element={\n                          <CustomiseProduct\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/ipt'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n\n                      <Route\n                        path='/quick-quotes/email-support'\n                        element={\n                          <SendAnEmail\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/dia'\n                        element={\n                          <CustomiseProduct\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/l3vpn'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/iplc'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/dark-fibre'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/nplc'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='quick-quotes/create-quote/customise-product/public-cloud-access'\n                        element={\n                          <RequestQuote\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/* converge routes */}\n                      <Route\n                        path='converge'\n                        element={\n                          <ConvergeDashboard\n                            serviceNum={serviceNum}\n                            requestsNum={requestsNum}\n                            draftsNum={draftsNum}\n                            isSupueruser={isSupueruser}\n                            serviceRequests={serviceRequests ?? []}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services'\n                        element={\n                          <ServiceInventory\n                            data={userServiceInventory}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/l2vpn'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/l3vpn'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/iplc'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/nplc'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/dark-fibre'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/dia'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/leo-satellite'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/public-cloud-access'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service/ip-transit'\n                        element={\n                          <TechnicalSpecificationsForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/service-requests'\n                        element={\n                          <ServiceRequestTable\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            serviceRequests={serviceRequests ?? []}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/email-support'\n                        element={\n                          <SendConvergeEmail\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/support-&-faqs'\n                        element={\n                          <SupportTicket\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            name={''}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/request-new-service'\n                        element={\n                          <ServiceRequest\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/service-requests/l2vpn'\n                        element={\n                          <ServiceRequestSelection\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/service-requests/dia'\n                        element={\n                          <ServiceRequestSelection\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/quick-quote/l2vpn'\n                        element={\n                          <QuickQuotesBasicForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/quick-quote/dia'\n                        element={\n                          <QuickQuotesBasicForm\n                            profile={retrievedProfile}\n                            isSupueruser={isSupueruser}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/terms-and-conditions'\n                        element={\n                          <TermsAndConditions\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/reports'\n                        element={\n                          <ReportingDashboard\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/l2vpn/reporting'\n                        element={\n                          <ProductReport\n                            data={userServiceInventory}\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='converge/services/reporting'\n                        element={\n                          <ReportingAnalytics\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/* products routes */}\n                      {/* <Route path='quick-quotes-support-faqs' element={<QuickQuoteSupportTicket />} /> */}\n                      {/** Latency Matrix */}\n                      <Route\n                        path='Latency-Matrix-Overview'\n                        element={\n                          <LatencyMatrix\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='disclaimer'\n                        element={\n                          <Disclaimer\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      {/** Global */}\n                      <Route\n                        path='profile'\n                        element={<Profile profile={retrievedProfile} logoutF={logoutF} />}\n                      />\n                      <Route path='*' element={<Error404 />} />\n                      <Route path='ipx-analytics' element={<RedirectToIPXPortal />} />\n                      <Route path='sms-hub' element={<RedirectToSMSHub />} />\n                      <Route\n                        path='network-tools/looking-glass'\n                        element={\n                          <LookingGlassPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n\n                      <Route\n                        path='network-tools/peering-list'\n                        element={\n                          <PeeringListPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='peering-information/policy'\n                        element={\n                          <PeeringPolicyPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='peering-information/list'\n                        element={\n                          <PeeringListPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                      <Route\n                        path='peering-information/request'\n                        element={\n                          <PeeringRequestPortal\n                            isSupueruser={isSupueruser}\n                            profile={retrievedProfile}\n                            logoutF={logoutF}\n                          />\n                        }\n                      />\n                    </Routes>\n                  </Col>\n                </Wrapper>\n              </Container>\n              <BayobabFonts />\n            </>\n          )}\n        </ThemeProvider>\n      )}\n    </>\n  );\n};\n\nexport const sendToAnalytics = ({ id, name, value }: Metric): void => {\n  // Assumes the metric name is the same as the event name in Google Analytics\n  miscTracking('webVitals', 'reportWebVitals', {\n    eventCategory: 'Web Vitals',\n    value: Math.round(name === 'CLS' ? value * 1000 : value), // Ensure values are in milliseconds\n    eventLabel: id, // Use the Web Vitals ID as the event label\n    nonInteraction: true, // Prevents this event from affecting bounce rate\n  });\n\n  trackEvent('Web Vitals', {\n    eventCategory: 'Performance',\n    eventAction: name,\n    value: Math.round(name === 'CLS' ? value * 1000 : value),\n    eventLabel: id,\n    nonInteraction: true,\n  });\n};\n// webVital to monitor application performance\nreportWebVitals(sendToAnalytics);\n\nexport const RedirectToIPXPortal = (): ReactElement => {\n  useEffect(() => {\n    window.open(process.env.IPX_PORTAL_URL, '_blank');\n    window.location.href = '/';\n  }, []);\n\n  return <></>;\n};\n\nexport const RedirectToSMSHub = (): ReactElement => {\n  useEffect(() => {\n    window.open(process.env.SMS_HUB_URL, '_blank');\n    window.location.href = '/';\n  }, []);\n\n  return <></>;\n};\n","import * as FeatureHubReact from '@feature-hub/react';\nimport * as react from 'react';\nimport * as paragonFoundation from '@mtnkente/paragon-foundation';\nimport * as paragonButtons from '@mtnkente/paragon-buttons';\nimport * as paragonDisplay from '@mtnkente/paragon-display';\nimport * as paragonIcons from '@mtnkente/paragon-icons';\nimport * as paragonIndicators from '@mtnkente/paragon-indicators';\nimport * as paragonLayouts from '@mtnkente/paragon-layouts';\nimport * as paragonOverlays from '@mtnkente/paragon-overlays';\nimport * as styledComponents from 'styled-components';\n\nexport const Externals = {\n  react: react,\n  '@feature-hub/react': FeatureHubReact,\n  '@mtnkente/paragon-foundation': paragonFoundation,\n  '@mtnkente/paragon-buttons': paragonButtons,\n  '@mtnkente/paragon-display': paragonDisplay,\n  '@mtnkente/paragon-icons': paragonIcons,\n  '@mtnkente/paragon-indicators': paragonIndicators,\n  '@mtnkente/paragon-layouts': paragonLayouts,\n  '@mtnkente/paragon-overlays': paragonOverlays,\n  'styled-components': styledComponents,\n};\n","import {\n  FeatureServiceBinder,\n  FeatureServiceProviderDefinition,\n  SharedFeatureService,\n} from '@feature-hub/core';\nimport { CORRELATION_ID } from '../utils';\nimport apiClient from '../interceptors/auth-interceptor';\nimport { DeleteApiResponse, TemplateResponse } from '../types/template-response';\nimport { Lead, LeadResponse, ListQuoteResponse, ServiceForm } from '../models';\nimport { NotificationPayload, NotificationResponse } from '../apis/send-notification';\nimport { UpgradeRequest } from '../models/upgrade-request';\n\nlet productQuoteData: any[] = []; // In-memory storage for productQuote data\nlet emailTempData: any[] = []; // In-memory storage for emailTemp data\n\nexport interface ApiClientRequest {\n  postMethod(data: object): Promise<void>;\n  postUpload(\n    correlationId: string,\n    senderId: string,\n    payload: FormData,\n    fileType: string\n  ): Promise<void>;\n  setEmailTempData: (newData: any) => void;\n  postCampaignMethod(\n    correlationId: string,\n    senderId: string,\n    payload: FormData,\n    category: string\n  ): Promise<void>;\n  getEmailTempData: () => any[];\n  getData: () => any[];\n  clearData: () => void;\n  setData: (newData: any) => void;\n  postQuote: (data: object) => Promise<void>;\n  getMethodBspTemplates: (limit: number) => Promise<TemplateResponse>;\n  getMethodBspTemplatesForCampaigns: (limit: number) => Promise<TemplateResponse>;\n  getVerificationStatus(): Promise<void>;\n  submitVerificationDocs(): Promise<void>;\n  postVerificationDocs(docType: string): Promise<void>;\n  putMethodBsp: (data: object, templateId: string) => Promise<void>;\n  deleteBspTemplate: (templateId: string, templateName: string) => Promise<DeleteApiResponse>;\n  deleteQuote: (quoteName: string) => Promise<void>;\n  downloadDataSheet: (url: string, fileName: string) => Promise<'success' | 'error'>;\n  listQuotes: () => Promise<ListQuoteResponse>;\n  listSavedQuotes: () => Promise<ListQuoteResponse>;\n  cancelService: (data: object) => Promise<void>;\n  upgradeService: (data: object) => Promise<void>;\n  saveLead(correlationId: string, lead: Lead, token?: string): Promise<LeadResponse>;\n  postDraftEmail: (data: object) => Promise<void>;\n  saveRequest(correlationId: string, request: ServiceForm, token?: string): Promise<any>;\n  postLeadEmail(data: object): Promise<void>;\n  updateUser(data: object, contactId: string): Promise<void>;\n  updateUserAccess(data: object): Promise<void>;\n  removeUserAccess(data: object, type: string, contactId: string): Promise<void>;\n  deleteRequest(\n    correlationId: string,\n    id: string,\n    emailAddress: string,\n    token?: string\n  ): Promise<void>;\n  updateRequest(\n    correlationId: string,\n    request: ServiceForm,\n    emailAddress: string,\n    token?: string\n  ): Promise<void>;\n  getWbspAnalytics(\n    startDate: string,\n    endDate: string,\n    templateId: string\n  ): Promise<TemplateResponse>;\n  saveUpgradeRequest(\n    correlationId: string,\n    request: UpgradeRequest,\n    emailAddress: string,\n    token?: string\n  ): Promise<any>;\n}\n\nexport interface SharedApiClientService extends SharedFeatureService {\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  readonly '1.0.0': FeatureServiceBinder<ApiClientRequest>;\n}\n\nexport const apiClientService: FeatureServiceProviderDefinition<SharedApiClientService> = {\n  id: 'api:api-client-get-post',\n\n  create: () => ({\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    '1.0.0': (): any => {\n      return {\n        featureService: {\n          async postMethod(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-quote`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                token: sessionStorage.getItem('cToken'),\n              },\n            });\n            return response.data;\n          },\n\n          async postMethodBsp(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-create-wsp-templates`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'multipart/form-data',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n            });\n            return response.data;\n          },\n\n          async putMethodBsp(data: object, templateId: string): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-update-wsp-templates/?templateId=${templateId}`;\n            const response = await apiClient.put(url, data, {\n              headers: {\n                'Content-Type': 'multipart/form-data',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n            });\n            return response.data;\n          },\n\n          async postUpload(\n            correlationId: string,\n            senderId: string,\n            payload: FormData,\n            fileType: string\n          ): Promise<any> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wbsp-upload-media-meta/`;\n            const response = await apiClient.post(url, payload, {\n              headers: {\n                correlationId: CORRELATION_ID,\n                senderId,\n                'Content-Type': 'multipart/form-data',\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                fileType: fileType,\n                Accept: '*/*',\n              },\n            });\n\n            return response.data;\n          },\n\n          async getMethodBspTemplates(limit: number): Promise<TemplateResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-get-wsp-templates`;\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n              params: {\n                limit,\n              },\n            });\n            return response.data;\n          },\n          async getWbspAnalytics(\n            startDate: string,\n            endDate: string,\n            templateId: string,\n            granularity: string = 'DAILY'\n          ): Promise<TemplateResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-bayobab-conversion-api`;\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                wabaId: sessionStorage?.getItem('wId'),\n              },\n              params: {\n                fields: 'template_analytics',\n                start: startDate,\n                end: endDate,\n                granularity,\n                templateIds: `${templateId}`,\n              },\n            });\n            return response.data;\n          },\n\n          async getMethodBspTemplatesForCampaigns(limit: number): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-get-wsp-templates?status=approved&category=marketing,utility`;\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n              params: {\n                limit,\n              },\n            });\n            return response.data;\n          },\n          async postVerificationDocs(docType: string): Promise<void> {\n            const fileKey = `uploadedDoc_${docType}`;\n            const uploadedDoc = sessionStorage.getItem(fileKey);\n            if (uploadedDoc) {\n              const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-wbm-document-analyser`;\n              const formData = new FormData();\n\n              const validationFileType = docType === 'business_name' ? 'statement' : 'utility';\n              formData.append(\n                validationFileType,\n                productQuoteData[fileKey][0],\n                JSON.parse(uploadedDoc)?.url\n              );\n\n              const response = await apiClient.post(url, formData, {\n                headers: {\n                  'Content-Type': 'multipart/form-data',\n                  validationRule:\n                    docType === 'business_name'\n                      ? 'Business'\n                      : docType === 'phone_number'\n                        ? 'Contacts'\n                        : 'Address',\n                  correlationId: CORRELATION_ID,\n                  email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  token: sessionStorage.getItem('cToken'),\n                  // wabaId: sessionStorage.getItem('wabaId'),\n                },\n              });\n              return response.data;\n            }\n          },\n          async getVerificationStatus(): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-bayobab-wbm-document-status`;\n\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'multipart/form-data',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                wabaId: sessionStorage.getItem('wabaId'),\n              },\n            });\n            return response.data;\n          },\n          async submitVerificationDocs(): Promise<void> {\n            const docKeys = [\n              'uploadedDoc_address',\n              'uploadedDoc_phone_number',\n              'uploadedDoc_business_name',\n            ];\n            const allDocsExist = docKeys.every((key) => sessionStorage.getItem(key));\n            if (allDocsExist) {\n              const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-bayobab-wbm-document-verifier`;\n              const formData = new FormData();\n\n              docKeys.forEach((key) => {\n                const stored = sessionStorage.getItem(key);\n                if (!stored) return;\n\n                const parsed = JSON.parse(stored);\n                const file = productQuoteData[key]?.[0];\n\n                if (file) {\n                  formData.append('business_documents[]', file, parsed.url);\n                }\n              });\n              const response = await apiClient.post(url, formData, {\n                headers: {\n                  'Content-Type': 'multipart/form-data',\n                  correlationId: CORRELATION_ID,\n                  email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  token: sessionStorage.getItem('cToken'),\n                },\n              });\n              return response.data;\n            }\n          },\n          async getCampaignMethod(): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wsp-get-campaign`;\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n            });\n            return response.data;\n          },\n\n          async deleteBspTemplate(\n            templateId: string,\n            templateName: string\n          ): Promise<DeleteApiResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-delete-wsp-templates`;\n            try {\n              const response = await apiClient.delete(url, {\n                headers: {\n                  correlationId: CORRELATION_ID,\n                  email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  token: sessionStorage.getItem('cToken'),\n                },\n                params: {\n                  templateId,\n                  templateName,\n                },\n              });\n              return response.data;\n            } catch (error) {\n              console.error('Error deleting template:', error);\n              throw error;\n            }\n          },\n\n          async deleteQuote(quoteName: string): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-delete-quote`;\n            try {\n              const response = await apiClient.delete(url, {\n                headers: {\n                  'Content-Type': 'application/json',\n                  correlationId: CORRELATION_ID,\n                  notificationType: 'DeleteQuote',\n                  emailAddress: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  quoteName: quoteName,\n                },\n              });\n              return response.data;\n            } catch (error) {\n              console.error('Error deleting template:', error);\n              throw error;\n            }\n          },\n\n          clearData: (): any => {\n            productQuoteData = [];\n            emailTempData = [];\n          },\n          getData: (): any[] => {\n            return productQuoteData; // Return in-memory data\n          },\n\n          setData: (newData: any): void => {\n            if (newData !== null && newData !== undefined) {\n              productQuoteData = { ...productQuoteData, ...newData }; // Update in-memory storage\n            }\n          },\n\n          getEmailTempData: (): any[] => {\n            return emailTempData; // Return in-memory data\n          },\n\n          setEmailTempData: (newData: any): void => {\n            if (newData !== null && newData !== undefined) {\n              emailTempData = newData; // Update in-memory storage\n            }\n          },\n          async postQuote(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                notificationType: 'FixedQuote',\n              },\n            });\n            return response.data;\n          },\n          async downloadDataSheet(url: string, fileName: string): Promise<'success' | 'error'> {\n            try {\n              const response = await fetch(url);\n\n              if (!response.ok) {\n                return 'error';\n              }\n\n              const blob = await response.blob();\n              const downloadUrl = window.URL.createObjectURL(blob);\n\n              const link = document.createElement('a');\n              link.href = downloadUrl;\n              link.setAttribute('download', fileName);\n              document.body.appendChild(link);\n              link.click();\n              document.body.removeChild(link);\n\n              window.URL.revokeObjectURL(downloadUrl);\n              return 'success';\n            } catch (error) {\n              console.error('Download failed:', error);\n              return 'error';\n            }\n          },\n\n          async postEmailQuote(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                notificationType: 'FixedQuote',\n              },\n            });\n            return response.data;\n          },\n\n          async getPhoneNumberMethod(): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wbsp-phone-number`;\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n              },\n            });\n            return response.data;\n          },\n\n          async postCampaignMethod(\n            senderId: string,\n            payload: FormData,\n            category: string\n          ): Promise<any> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wsp-create-campaign`;\n\n            const response = await apiClient.post(url, payload, {\n              headers: {\n                correlationId: CORRELATION_ID,\n                senderId,\n                category,\n                'Content-Type': 'multipart/form-data',\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                Accept: '*/*',\n              },\n            });\n\n            return response.data;\n          },\n\n          // async postCampaignMethod(senderId: string, payload: FormData): Promise<any> {\n          //   const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-wsp-create-campaign`;\n\n          //   const response = await apiClient.post(url, payload, {\n          //     headers: {\n          //       correlationId: CORRELATION_ID,\n          //       senderId,\n          //       'Content-Type': 'multipart/form-data',\n          //       email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n          //       token: sessionStorage.getItem('cToken'),\n          //       Accept: '*/*',\n          //     },\n          //   });\n\n          //   return response.data;\n          // },\n\n          async listQuotes(): Promise<ListQuoteResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-list-quotes`;\n\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n              },\n              params: {\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n              },\n            });\n\n            return response.data;\n          },\n\n          async listSavedQuotes(): Promise<ListQuoteResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-retrieve-quotes`;\n\n            const response = await apiClient.get(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                notificationType: 'ListQuotes',\n                emailAddress: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n              },\n            });\n\n            return response.data;\n          },\n\n          async postSendNotification(\n            correlationId: string,\n            data: NotificationPayload\n          ): Promise<NotificationResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-send-notification`;\n\n            const response = await apiClient.post<NotificationResponse>(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n              },\n            });\n\n            return response.data;\n          },\n\n          async cancelService(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            try {\n              const response = await apiClient.post(url, data, {\n                headers: {\n                  'Content-Type': 'application/json',\n                  correlationId: CORRELATION_ID,\n                  email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  token: sessionStorage.getItem('cToken'),\n                  notificationType: 'ConvergeCancellation',\n                },\n              });\n              return response.data;\n            } catch (error) {\n              console.error('Error sending cancel request:', error);\n              throw error;\n            }\n          },\n\n          async upgradeService(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            try {\n              const response = await apiClient.post(url, data, {\n                headers: {\n                  'Content-Type': 'application/json',\n                  correlationId: CORRELATION_ID,\n                  email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                  token: sessionStorage.getItem('cToken'),\n                  notificationType: 'UpgradeRequest',\n                },\n              });\n              return response.data;\n            } catch (error) {\n              console.error('Error sending cancel request:', error);\n              throw error;\n            }\n          },\n\n          async saveLead(correlationId: string, lead: Lead, token?: string): Promise<LeadResponse> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v2/sm-central-lead`;\n\n            const response = await apiClient.post(url, lead, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n                token,\n              },\n            });\n\n            return response.data;\n          },\n\n          async postDraftEmail(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                notificationType: 'ConvergeSaveDraft',\n              },\n            });\n            return response.data;\n          },\n\n          async saveRequest(\n            correlationId: string,\n            request: ServiceForm,\n            emailAddress: string,\n            token?: string\n          ): Promise<any> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-save-service-requests`;\n            return apiClient.post(url, request, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n                token,\n                emailAddress,\n                requestType: 'SaveRequest',\n              },\n            });\n          },\n          async saveUpgradeRequest(\n            correlationId: string,\n            request: UpgradeRequest,\n            emailAddress: string,\n            token?: string\n          ): Promise<any> {\n            const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-central-save-upgrade-requests`;\n            return apiClient.post(url, request, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n                token,\n                emailAddress,\n                requestType: 'SaveRequest',\n              },\n            });\n          },\n\n          async postLeadEmail(data: object): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-notifications`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                email: JSON.parse(Object(sessionStorage.getItem('profile')))?.emailAddress,\n                token: sessionStorage.getItem('cToken'),\n                notificationType: 'ConvergeServiceRequest',\n              },\n            });\n            return response.data;\n          },\n\n          async updateUser(data: object, contactId: string, type: string): Promise<void> {\n            const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                contactId: contactId,\n                type: type,\n              },\n            });\n            return response.data;\n          },\n\n          async updateUserAccess(data: object, type: string): Promise<void> {\n            const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                type: type,\n              },\n            });\n            return response.data;\n          },\n\n          async removeUserAccess(data: object, type: string, contactId: string): Promise<void> {\n            const url = `${process.env.REACT_APP_SECONDARY_API_BASE_URL}/v1/sm-bayobab-create-user-management`;\n            const response = await apiClient.post(url, data, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId: CORRELATION_ID,\n                type: type,\n                contactId: contactId,\n              },\n            });\n            return response.data;\n          },\n\n          async deleteRequest(\n            correlationId: string,\n            id: string,\n            emailAddress: string,\n            token?: string\n          ): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-delete-service-requests?_id=${id}`;\n            await apiClient.delete(url, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n                token,\n                requestType: 'DeleteRequest',\n                emailAddress,\n              },\n            });\n          },\n          async updateRequest(\n            correlationId: string,\n            request: ServiceForm,\n            emailAddress: string,\n            token?: string\n          ): Promise<void> {\n            const url = `${process.env.REACT_APP_API_BASE_URL}/v1/sm-central-update-service-requests`;\n            await apiClient.put(url, request, {\n              headers: {\n                'Content-Type': 'application/json',\n                correlationId,\n                token,\n                emailAddress,\n                requestType: 'UpdateRequest',\n              },\n            });\n          },\n        },\n      };\n    },\n  }),\n};\n","import { FeatureHubContextProvider } from '@feature-hub/react';\nimport { createFeatureHub } from '@feature-hub/core';\nimport { defineExternals, loadAmdModule } from '@feature-hub/module-loader-amd';\nimport React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { createRootLocationTransformer, defineHistoryService } from '@feature-hub/history-service';\nimport { NavigationServiceV1, navigationServiceDefinition } from './app/services/NavigationService';\nimport { App } from './app/App';\nimport { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom';\nimport { Externals } from './app/externals/ExternalLibs';\nimport { loadFederatedModule } from '@feature-hub/module-loader-federation';\nimport { dataSharingServiceDefinition } from './app/services/SharedDataService';\nimport { localDataSharingServiceDefinition } from './app/services/LocalDataService';\nimport { dynamicServiceDefinition } from './app/services/DynamicDataService';\nimport { Auth0Provider } from '@auth0/auth0-react';\nimport { apiClientService } from './app/services/ApiClient';\nimport { ProfileProvider } from './app/utils/ProfileProvider';\nimport { initialise, Initialise } from '@mtnkente/gtm';\n\ndefineExternals(Externals);\n\nconst { featureAppManager, featureServices } = createFeatureHub('main:integrator', {\n  moduleLoader: async (url, moduleType) =>\n    moduleType === 'federated' ? loadFederatedModule(url) : loadAmdModule(url),\n  providedExternals: {\n    react: process.env.REACT_VERSION as string,\n    '@feature-hub/react': process.env.FEATURE_HUB_REACT_VERSION as string,\n    'styled-components': '6.1.14',\n    '@mtnkente/paragon-foundation': '4.14.0',\n    '@mtnkente/paragon-buttons': '4.16.1',\n    '@mtnkente/paragon-display': '3.16.1',\n    '@mtnkente/paragon-icons': '3.11.0',\n    '@mtnkente/paragon-indicators': '3.14.1',\n    '@mtnkente/paragon-layouts': '3.13.1',\n    '@mtnkente/paragon-overlays': '3.20.0',\n  },\n  featureServiceDefinitions: [\n    defineHistoryService(createRootLocationTransformer({ consumerPathsQueryParamName: '/' })),\n    navigationServiceDefinition,\n    dataSharingServiceDefinition,\n    localDataSharingServiceDefinition,\n    dynamicServiceDefinition,\n    apiClientService,\n  ],\n  featureServiceDependencies: {\n    'shell:navigation-service': '^1.0.0',\n    'acme:shared-data-service': '1.0.0',\n    'acme:local-data-service': '1.0.0',\n    'acme:dynamic-service': '1.0.0',\n    'api:api-client-get-post': '^1.0.0',\n  },\n});\n\nexport const navigationService = featureServices[\n  navigationServiceDefinition.id\n] as NavigationServiceV1;\nconst root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);\nconst gtmId = process.env.GTM_ID as string;\n\ninitialise(\n  new Initialise({\n    consentAds: true,\n    consentAnalytics: true,\n    consentPreferences: true,\n    gtmId: gtmId,\n  })\n);\n\nroot.render(\n  <FeatureHubContextProvider value={{ featureAppManager }}>\n    <HistoryRouter history={navigationService.history}>\n      <Auth0Provider\n        domain={process.env.REACT_APP_OKTA_DOMAIN as string}\n        clientId={process.env.REACT_APP_OKTA_CLIENT as string}\n        useRefreshTokens={true}\n        cacheLocation='localstorage'\n        authorizationParams={{\n          audience: process.env.REACT_APP_OKTA_AUDIENCE as string,\n          scope: 'openid profile email offline_access',\n          // eslint-disable-next-line @typescript-eslint/naming-convention\n          redirect_uri: window.location.origin,\n        }}\n      >\n        <ProfileProvider>\n          <App />\n        </ProfileProvider>\n      </Auth0Provider>\n    </HistoryRouter>\n  </FeatureHubContextProvider>\n);\n","import {\n  SharedFeatureService,\n  FeatureServiceBinder,\n  FeatureServiceProviderDefinition,\n} from '@feature-hub/core';\n\nexport interface SharedDataServiceV1 {\n  setData(data: any): void;\n  getData(): any;\n}\n\nexport interface SharedDataService extends SharedFeatureService {\n  readonly '1.0.0': FeatureServiceBinder<SharedDataServiceV1>;\n}\n\nexport const dataSharingServiceDefinition: FeatureServiceProviderDefinition<SharedDataService> = {\n  id: 'acme:shared-data-service',\n\n  create: () => {\n    let sharedData: any;\n\n    return {\n      '1.0.0': () => ({\n        featureService: {\n          setData(data: any): void {\n            sharedData = { ...sharedData, ...data };\n          },\n          getData(): any {\n            return sharedData;\n          },\n        },\n      }),\n    };\n  },\n};\n","import {\n  SharedFeatureService,\n  FeatureServiceBinder,\n  FeatureServiceProviderDefinition,\n} from '@feature-hub/core';\n\nexport interface LocalSharedDataServiceV1 {\n  setData(data: Object): void;\n  getData(): Object;\n}\n\nexport interface LocalSharedDataService extends SharedFeatureService {\n  readonly '1.0.0': FeatureServiceBinder<LocalSharedDataServiceV1>;\n}\n\nexport const localDataSharingServiceDefinition: FeatureServiceProviderDefinition<LocalSharedDataService> =\n  {\n    id: 'acme:local-data-service',\n\n    create: () => {\n      let sharedData: {};\n\n      return {\n        '1.0.0': () => ({\n          featureService: {\n            setData(data: Object): void {\n              sharedData = { ...sharedData, ...data };\n            },\n            getData(): Object {\n              return sharedData;\n            },\n          },\n        }),\n      };\n    },\n  };\n","import {\n  SharedFeatureService,\n  FeatureServiceBinder,\n  FeatureServiceProviderDefinition,\n} from '@feature-hub/core';\n\nexport interface DynamicServiceV1 {\n  setData(data: any): void;\n  getData(): any;\n}\n\nexport interface DynamicService extends SharedFeatureService {\n  readonly '1.0.0': FeatureServiceBinder<DynamicServiceV1>;\n}\n\nexport const dynamicServiceDefinition: FeatureServiceProviderDefinition<DynamicService> = {\n  id: 'acme:dynamic-service',\n\n  create: () => {\n    let dynamicData: any;\n\n    return {\n      '1.0.0': () => ({\n        featureService: {\n          setData(data: any): any {\n            dynamicData = { ...dynamicData, ...data };\n          },\n          getData(): any {\n            return dynamicData;\n          },\n        },\n      }),\n    };\n  },\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, ThemeProvider } from '@mtnkente/paragon-foundation';\nimport { CustomFeatureAppRenderingParams, FeatureAppLoader } from '@feature-hub/react';\nimport ErrorUi from '../../../../../ErrorUI/ErrorUI';\n\nexport interface ModalProps {\n  openModal: () => void;\n  closeModal: () => void;\n  status: number;\n  results: boolean;\n  type?: string;\n}\n\nconst ConfirmModal = ({ closeModal, results, status, type }: ModalProps): JSX.Element => {\n  const [src, setSrc] = useState<string | null>(null);\n\n  useEffect(() => {\n    const fetchData = async (): Promise<void> => {\n      const res = await fetch(\n        process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL + 'fa-main/asset-manifest.json',\n        {\n          cache: 'no-cache',\n        }\n      );\n      const data = await res.json();\n      setSrc(`${process.env.REACT_APP_IP_PORTAL_CONNECT_MODAL}fa-main${data['main.js']}`);\n    };\n    fetchData().catch((error) => {\n      console.error('Error fetching data:', error);\n    });\n  }, []);\n\n  if (!src) return <div></div>;\n  return (\n    <ThemeProvider mode='light' platform='bayobab'>\n      <FeatureAppLoader\n        featureAppId='fa-bayobab-modal'\n        src={src}\n        moduleType=''\n        config={{\n          result: results,\n          title: 'Forms',\n          content: 'lead',\n          status: status,\n          login: () => {},\n          close: closeModal,\n          type: type,\n        }}\n        onError={(error: unknown): unknown => error}\n      >\n        {({ error, featureAppNode }: CustomFeatureAppRenderingParams): ReactElement => {\n          return error ? (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n            >\n              <ErrorUi productName={'modal'} />\n            </Col>\n          ) : (\n            <Col\n              style={{\n                flex: '1',\n                width: '100%',\n                padding: '0px',\n              }}\n            >\n              {featureAppNode}\n            </Col>\n          );\n        }}\n      </FeatureAppLoader>\n    </ThemeProvider>\n  );\n};\n\nexport default ConfirmModal;\n","import React, { useState } from 'react';\nimport { InlineNotification } from '@mtnkente/paragon-overlays';\nimport { Fault } from '@mtnkente/paragon-icons';\nimport { ThemeProvider } from '@mtnkente/paragon-foundation';\n\ninterface ProductProps {\n  productName: string;\n}\n\nconst ErrorUi = ({ productName }: ProductProps): JSX.Element => {\n  const [showNotification, setShowNotification] = useState(true);\n\n  const handleClose = (): void => {\n    setShowNotification(false);\n  };\n\n  return (\n    showNotification && (\n      <ThemeProvider mode='light' platform='bayobab'>\n        <InlineNotification\n          title={`${productName} Feature App failed to load`}\n          descriptionText='Please refresh the page or contact the support team.'\n          $colourType='error'\n          showNotification\n          inputIcon={<Fault />}\n          style={{ position: 'relative', flex: '1 1 1', width: '100%', top: '0' }}\n          onClose={handleClose}\n          $isStacked={true}\n          isDismissable={true}\n        />\n      </ThemeProvider>\n    )\n  );\n};\n\nexport default ErrorUi;\n","export const capitalizeFirstLetter = (str: string): string =>\n  str.replace(/\\b\\w/g, (char) => char.toUpperCase());\n\nexport const capitalizeAfterFullStop = (str: string): string =>\n  str.charAt(0).toUpperCase() + str.slice(1).replace(/(?<=\\.\\s)\\w/g, (char) => char.toUpperCase());\n","export class Lead {\n  interest: string;\n  fullName: string;\n  contactNumber: string;\n  emailAddress: string;\n  companyName: string;\n  country: string;\n  comment?: string;\n\n  constructor(data: Lead) {\n    this.interest = data.interest;\n    this.fullName = data.fullName;\n    this.contactNumber = data.contactNumber;\n    this.emailAddress = data.emailAddress;\n    this.companyName = data.companyName;\n    this.country = data.country;\n    this.comment = data.comment;\n  }\n}\n\nexport class IpxLead {\n  interest: string;\n  name: string;\n  phoneNumber: string;\n  emailAddress: string;\n  company: string;\n  jobTitle: string;\n  message: string;\n\n  constructor(data: IpxLead) {\n    this.interest = data.interest;\n    this.name = data.name;\n    this.phoneNumber = data.phoneNumber;\n    this.emailAddress = data.emailAddress;\n    this.company = data.company;\n    this.jobTitle = data.jobTitle;\n    this.message = data.message;\n  }\n}\n","export const countries = [\n  { label: 'Afghanistan' },\n  { label: 'Albania' },\n  { label: 'Algeria' },\n  { label: 'Andorra' },\n  { label: 'Angola' },\n  { label: 'Antigua and Barbuda' },\n  { label: 'Argentina' },\n  { label: 'Armenia' },\n  { label: 'Australia' },\n  { label: 'Austria' },\n  { label: 'Azerbaijan' },\n  { label: 'Bahamas' },\n  { label: 'Bahrain' },\n  { label: 'Bangladesh' },\n  { label: 'Barbados' },\n  { label: 'Belarus' },\n  { label: 'Belgium' },\n  { label: 'Belize' },\n  { label: 'Benin' },\n  { label: 'Bhutan' },\n  { label: 'Bolivia' },\n  { label: 'Bosnia and Herzegovina' },\n  { label: 'Botswana' },\n  { label: 'Brazil' },\n  { label: 'Brunei' },\n  { label: 'Bulgaria' },\n  { label: 'Burkina Faso' },\n  { label: 'Burundi' },\n  { label: 'Cabo Verde' },\n  { label: 'Cambodia' },\n  { label: 'Cameroon' },\n  { label: 'Canada' },\n  { label: 'Central African Republic' },\n  { label: 'Chad' },\n  { label: 'Chile' },\n  { label: 'China' },\n  { label: 'Colombia' },\n  { label: 'Comoros' },\n  { label: 'Congo (Congo-Brazzaville)' },\n  { label: 'Costa Rica' },\n  { label: 'Croatia' },\n  { label: 'Cuba' },\n  { label: 'Cyprus' },\n  { label: 'Czech Republic' },\n  { label: 'Denmark' },\n  { label: 'Djibouti' },\n  { label: 'Dominica' },\n  { label: 'Dominican Republic' },\n  { label: 'Ecuador' },\n  { label: 'Egypt' },\n  { label: 'England' },\n  { label: 'El Salvador' },\n  { label: 'Equatorial Guinea' },\n  { label: 'Eritrea' },\n  { label: 'Estonia' },\n  { label: 'Swaziland' },\n  { label: 'Ethiopia' },\n  { label: 'Fiji' },\n  { label: 'Finland' },\n  { label: 'France' },\n  { label: 'Gabon' },\n  { label: 'Gambia' },\n  { label: 'Georgia' },\n  { label: 'Germany' },\n  { label: 'Ghana' },\n  { label: 'Greece' },\n  { label: 'Greenland' },\n  { label: 'Grenada' },\n  { label: 'Guatemala' },\n  { label: 'Guinea' },\n  { label: 'Guinea-Bissau' },\n  { label: 'Guyana' },\n  { label: 'Haiti' },\n  { label: 'Honduras' },\n  { label: 'Hungary' },\n  { label: 'Iceland' },\n  { label: 'India' },\n  { label: 'Indonesia' },\n  { label: 'Iran' },\n  { label: 'Iraq' },\n  { label: 'Ireland' },\n  { label: 'Israel' },\n  { label: 'Italy' },\n  { label: 'Jamaica' },\n  { label: 'Japan' },\n  { label: 'Jordan' },\n  { label: 'Kazakhstan' },\n  { label: 'Kenya' },\n  { label: 'Kosovo' },\n  { label: 'Kiribati' },\n  { label: 'Kuwait' },\n  { label: 'Kyrgyzstan' },\n  { label: 'Laos' },\n  { label: 'Latvia' },\n  { label: 'Lebanon' },\n  { label: 'Lesotho' },\n  { label: 'Liberia' },\n  { label: 'Libya' },\n  { label: 'Liechtenstein' },\n  { label: 'Lithuania' },\n  { label: 'Luxembourg' },\n  { label: 'Madagascar' },\n  { label: 'Malawi' },\n  { label: 'Malaysia' },\n  { label: 'Maldives' },\n  { label: 'Mali' },\n  { label: 'Malta' },\n  { label: 'Marshall Islands' },\n  { label: 'Mauritania' },\n  { label: 'Mauritius' },\n  { label: 'Mexico' },\n  { label: 'Micronesia' },\n  { label: 'Moldova' },\n  { label: 'Monaco' },\n  { label: 'Mongolia' },\n  { label: 'Montenegro' },\n  { label: 'Morocco' },\n  { label: 'Mozambique' },\n  { label: 'Myanmar' },\n  { label: 'Namibia' },\n  { label: 'Nauru' },\n  { label: 'Nepal' },\n  { label: 'Netherlands' },\n  { label: 'New Zealand' },\n  { label: 'Nicaragua' },\n  { label: 'Niger' },\n  { label: 'Nigeria' },\n  { label: 'North Korea' },\n  { label: 'North Macedonia' },\n  { label: 'Norway' },\n  { label: 'Oman' },\n  { label: 'Pakistan' },\n  { label: 'Palau' },\n  { label: 'Palestine' },\n  { label: 'Panama' },\n  { label: 'Papua New Guinea' },\n  { label: 'Paraguay' },\n  { label: 'Peru' },\n  { label: 'Philippines' },\n  { label: 'Poland' },\n  { label: 'Portugal' },\n  { label: 'Qatar' },\n  { label: 'Romania' },\n  { label: 'Russia' },\n  { label: 'Rwanda' },\n  { label: 'Saint Kitts and Nevis' },\n  { label: 'Saint Lucia' },\n  { label: 'Saint Vincent and the Grenadines' },\n  { label: 'Samoa' },\n  { label: 'San Marino' },\n  { label: 'Sao Tome and Principe' },\n  { label: 'Saudi Arabia' },\n  { label: 'Senegal' },\n  { label: 'Serbia' },\n  { label: 'Seychelles' },\n  { label: 'Sierra Leone' },\n  { label: 'Singapore' },\n  { label: 'Slovakia' },\n  { label: 'Slovenia' },\n  { label: 'Solomon Islands' },\n  { label: 'Somalia' },\n  { label: 'South Africa' },\n  { label: 'South Korea' },\n  { label: 'South Sudan' },\n  { label: 'Spain' },\n  { label: 'Sri Lanka' },\n  { label: 'Sudan' },\n  { label: 'Suriname' },\n  { label: 'Sweden' },\n  { label: 'Switzerland' },\n  { label: 'Syria' },\n  { label: 'Taiwan' },\n  { label: 'Tajikistan' },\n  { label: 'Tanzania' },\n  { label: 'Thailand' },\n  { label: 'Timor-Leste' },\n  { label: 'Togo' },\n  { label: 'Tonga' },\n  { label: 'Trinidad and Tobago' },\n  { label: 'Tunisia' },\n  { label: 'Turkey' },\n  { label: 'Turkmenistan' },\n  { label: 'Tuvalu' },\n  { label: 'Uganda' },\n  { label: 'Ukraine' },\n  { label: 'United Arab Emirates' },\n  { label: 'United Kingdom' },\n  { label: 'United States of America' },\n  { label: 'Uruguay' },\n  { label: 'Uzbekistan' },\n  { label: 'Vanuatu' },\n  { label: 'Vatican City' },\n  { label: 'Venezuela' },\n  { label: 'Vietnam' },\n  { label: 'Yemen' },\n  { label: 'Zambia' },\n  { label: 'Zimbabwe' },\n];\n"],"names":["async","saveLead","correlationId","lead","token","apiClient","post","headers","data","breakpoints","ModalOverlay","styled","div","FormContainer","BspForm","CloseButton","Card","CORRELATION_ID","characters","randomValues","Uint8Array","window","crypto","getRandomValues","result","i","charAt","generateCorrelationId","WHATSAPP_BM_SERVICE","LOOKING_GLASS","TERMS_OF_USE","WABSP_API_DOC","Privacy_Notice","PEERING_POLICY","PEERING_LIST","PEERING_REQUEST","DASHBOARD","PROFILE","FEEDBACK_PAGE","UPCOMING_SERVICES_PAGE","LOG_SUPPORT_TICKET_PAGE","DISCLAIMER_PAGE","IPX_ANALYTICS_PAGE","LATENCY_MATRIX_PAGE","WHATSAPP_OVERVIEW_PAGE","WHATSAPP_MESSAGE_TEMPLATES_PAGE","WHATSAPP_CAMPAIGNS_PAGE","WHATSAPP_SUPPORT_PAGE","WHATSAPP_ACCOUNT_MANAGEMENT_PAGE","QUICK_QUOTES_PAGE","QUICK_QUOTES_SUPPORT_PAGE","QUICK_QUOTES_OVERVIEW_PAGE","SAVED_QUOTES_PAGE","QUICK_QUOTES_DETAILS_TABLE_PAGE","QUICK_QUOTES_TERMS_AND_CONDITIONS_PAGE","QUICK_QUOTES_PRODUCT_PAGE","QUICK_QOUTES_CUSTOMISE_PRODUCT_PAGE","L2VPN_PAGE","IPT_PAGE","EMAIL_SUPPORT_PAGE","DIA_PAGE","L3VPN_PAGE","IPLC_PAGE","DARK_FIBRE_PAGE","NPLC_PAGE","PUBLIC_CLOUD_ACCESS_PAGE","CONVERGE_PAGE","SERVICE_INVENTORY_PAGE","CONVERGE_SUPPORT_AND_FAQS_PAGE","REQUEST_L2VPN_SERVICE_PAGE","REQUEST_L3VPN_SERVICE_PAGE","REQUEST_DIA_SERVICE_PAGE","REQUEST_IPLC_SERVICE_PAGE","REQUEST_DARK_FIBRE_SERVICE_PAGE","REQUEST_NPLC_SERVICE_PAGE","QQ_L2VPN_SERVICE_PAGE","QQ_DIA_SERVICE_PAGE","REQUEST_LEO_SATELLITE_SERVICE_PAGE","REQUEST_PCA_SERVICE_PAGE","REQUEST_IP_TRANSIT_PAGE","CONVERGE_REPORTS_PAGE","CREATE_USER_PAGE","FEEDBACK_BUTTON_HIDDEN_PATHS","axios","create","baseURL","process","timeout","interceptors","request","use","config","userToken","sessionStorage","getItem","error","Promise","reject","response","status","service","serviceId","location","href","LoadingWrapper","BodyText","_ref","theme","colors","typography","css","LoaderApp","_jsx","ThemeProvider","mode","platform","children","_jsxs","CircularIndeterminate","size","navigationServiceDefinition","id","dependencies","featureServices","history","rootHistory","1.0.0","featureService","navigateTo","name","params","contentTracking","Content","eventName","eventDescription","eventTrigger","category","subcategory","title","description","url","URLSearchParams","push","pathname","originalPush","HistoryUrl","state","navigateTos","slug","toLowerCase","replace","createSlug","DashboardWrapper","BannerMobileWrapper","FeatureAppContainer","HeaderWrapper","PlusIcon","width","height","viewBox","fill","xmlns","style","maskType","maskUnits","x","y","clipPath","d","stroke","strokeWidth","strokeLinecap","mask","fillOpacity","WhatsAppBNIcon","fillRule","clipRule","displayName","strokeMiterlimit","ProductCardsData","icon","launching","route","ConvergeIcon","getProductCardsData","userActiveServices","retrievedProfile","hasWhatsAppService","includes","hasConvergeService","isFixed","updatedCards","serviceAvailable","undefined","InfoCardsData","label","image","getToken","get","Overlay","OverlayStyle","Text","h1","_ref2","isLoading","Modal","floats","onContinue","onLogout","timeRemaining","close","setClose","useState","timeLeft","setTimeLeft","useEffect","intervalId","setInterval","prevTime","clearInterval","_Fragment","$fontStyle","time","minutes","Math","floor","seconds","String","padStart","formatTime","ComboButtons","StandardButton","$variant","onClick","getServiceRequests","emailAddress","Authorization","requestType","ProfileContext","createContext","isAuthenticated","userName","userPortalRoles","accountActivationModalOpen","errorModalOpen","userServiceInventory","serviceRequests","useProfile","useContext","ProfileProvider","user","getAccessTokenSilently","logout","useAuth0","setUserName","setUserActiveServices","setUserPortalRoles","navigate","useNavigate","setRetrievedProfile","crmToken","setCrmToken","setToken","setAccountActivationModalOpen","setErrorModalOpen","setUserServiceInventory","setServiceRequests","isInactive","setIsInactive","setTimeRemaining","idleTimeout","resetActivity","useCallback","clearTimeout","idleTimer","warningTimer","setTimeout","handleLogout","logoutParams","returnTo","origin","federated","clientId","localStorage","clear","activityEvents","forEach","event","addEventListener","removeEventListener","max","currentUrl","fetchUserToken","then","setItem","catch","message","split","portalRoles","length","activeServices","upn","email","getServiceInventory","serviceInventory","er","console","fetchServiceInventory","requests","slice","reverse","err","fetchServiceRequests","accessToken","fetchToken","getProfile","profileDetails","JSON","stringify","fetchProfile","path","basePath","startsWith","isPublicRoute","Loading","Provider","value","LogoutModal","handleContinueSession","resolveFeatureAppUrl","baseUrl","fileName","fetch","cache","hashedFile","json","Error","useFeatureAppUrls","envs","urls","setUrls","resolvedUrls","key","Object","entries","fetchUrls","closeModal","content","enquireModal","FeatureAppLoader","featureAppId","src","moduleType","rightButton","onError","featureAppNode","Col","flex","padding","$xs","ErrorUi","productName","BannerData","backgroundColor","bodyText","mobileImage","backgroundImage","linkLabel","getNotification","userId","parse","formatDateLabel","timestamp","datePart","timePart","day","month","year","map","Number","hours","givenDate","Date","today","givenDateOnly","getFullYear","getMonth","getDate","differenceInTime","getTime","differenceInDays","checkUnreadNotifications","notifications","some","notification","editNotification","messageId","put","MyDashboard","profile","isSupueruser","logoutF","isModalOpen","setIsModalOpen","setContent","setNotifications","loading","setLoading","setErr","item","index","productType","body","additionalData","finally","handleAllUpdate","Array","isArray","filter","header","banner","servicesList","insights","defaultConfig","useMemo","username","fullName","alertStatus","companyDetails","img","picture","themeMode","myProfileText","logoutText","viewType","upcomingServicesText","supportTicketText","feedbackText","imgProfileRailMenuItems","UserSymbol","redirectUrl","activeTab","company","UserGroup","logOutState","Logout","type","handleDelete","handleUpdate","markallread","login","openEnquireModal","extendedBannerData","clickHandler","ToastProvider","duration","$inverse","ToastNotification","position","top","right","onOpenChange","ToastDescription","bannerData","_ref3","EnquireModal","closeEnquireModal","cards","_ref4","_ref5","BayobabFonts","onPerfEntry","Function","onCLS","onFCP","onLCP","onTTFB","Wrapper","supportTicket","HeaderData","provideFeedback","overviewText","isMenuOpen","Data","p","footer","sidebarRailMenuItems","Dashboard","MyProducts","Question","Feedback","MainContainer","LandingContainer","BannerContainer","Title","ModalCard","SubTitle","ContentBox","InnnerContentBox","ContantContainer","MainContantContainer","SubHeader","Icon","IconContainer","Contant","ImageContainer","StyledImageContainer","Image","LinkBotton","_ref6","TopImgContainer","TopContantContainer","useResponsiveSize","defaultSize","mobileSize","setSize","handleResize","innerWidth","Peering","strokeLinejoin","LookingGlass","Services","Recharge","Bundles","Convenience","CustomisableOptions","rx","cx","cy","r","loginWithRedirect","setSrc","res","fetchData","Cards","newNavigation","tabIndex","role","scrollTo","NewTab","color","borderBottom","onKeyDown","e","onFocus","target","outline","onBlur","NetworkTool","isOpen","setIsOpen","openModal","ModalContainer","ModalHeader","h2","ModalContent","List","li","onClose","Close","marginLeft","CookieContainer","props","$isVisible","onAccept","showMessage","setShowMessage","setModalOpen","isStacked","setIsStacked","Dialog","$isStacked","handleAccept","button","Message","Alert","BSPText","BannerHeader","BannerText","BSPBanner","BSPInnerBanner","InnerButton","BSPSubTitle","_ref7","BSPContentBox","BSPContentBoxBotton","CardBSP","BSPMainContantContainer","BSPContantBox","BSPContantContainer","BSPSubHeader","_ref8","BSPSubButton","_ref9","BSPImageContainer","BSPImage","ModalForms","lazy","ConfirmModal","WhatsappBSP","isOpenConfirm","setIsOpenConfirm","results","setResults","setStatus","Suspense","fallback","openModalConfirm","openLoading","closeLoading","notResults","isResults","closeModalConfirm","FooterContainer","Footer","modal","ContentBoxBotton","TextContainer","buttonVariants","primary","secondary","Alerts","Monitoring","Troubleshooting","ipxAnalyticsFormContent","formSections","fields","isOptional","options","countries","dropdownSearch","buttonLabel","Form","formContent","handleSubmit","formData","interest","capitalizeFirstLetter","companyName","jobTitle","comment","capitalizeAfterFullStop","Lead","hasRecaptcha","modalType","document","overflow","ScrollBarNavigator","$isVertical","StyledButton","setModalType","IpxModalForms","$isFullWidth","IpxAnalytics","mobile","setMobile","marginBottom","trackPage","ReactGA","send","hitType","page","trackEvent","action","arguments","QuickQuotesMainContainer","QuickQuotesContentContainer","QuickQuotesImageContainer","PasswordVisible","Converge","LandingPage","CookieMessage","handleAcceptCookies","AuthErrorModal","isFeatureAppLoading","NavContainer","$zIndex","Header","backBotton","behavior","AboutLookingHeader","AboutContainer","ImageWrapper","InnerText","InnerTextFirst","lookingGlass","Accordion","AccordionItem","display","alt","PeeringPolicy","peeringList","PeeringInformation","OverviewCardsContainer","FacebookIcon","PhoneBook","EnterpriseManagement","BspData","subTitle","productCard","AwaitingApprovalBannerData","Lock","text","AccountActiveBannerData","Tick","ErrorStateBannerData","StyledContainer","StyledRedirectContainer","StyledMetricsContainer","StyledContent","StyledButtonContent","StyledNumber","StyledTitle","StyledStats","IconTextHolder","_ref0","_ref1","IconWrapper","StyledRedirectButtonContent","_ref10","DividerWrapper","cardType","summary","redirectTo","loadingState","navigationService","num","displayNum","StatusIndicator","$color","caption","Divider","ChevronRight","getActivePhoneNums","DashboardWbsp","loadingCompanyDetails","setloadingCompanyDetails","loadingCampaign","setLoadingCampaigns","loadingPhoneNums","setLoadingPhoneNums","failedCompanyDetails","setfailedCompanyDetails","failedPhoneNums","setfailedPhoneNums","failedCampaigns","setfailedCampaigns","campaigns","setCampaigns","React","setCompanyDetails","phoneNums","setPhoneNums","helpMenu","getCompanyDetails","fetchCompanyDetails","fetchActivePhoneNums","getCampaign","sortedData","sort","a","b","updatedAt","fetchCampaign","totalMessages","reduce","sum","campaign","totalRecipients","totalSent","sent","totalDelivered","delivered","totalRead","read","isEmptyCompanyData","keys","background","borderRadius","creditLineStatus","phoneNumberStatus","InlineNotification","inputIcon","descriptionText","$colourType","showNotification","isDismissable","OverviewCards","Fault","Phonebook","Megaphone","Chat","Send","round","AccordionWrap","templateRow","templateNameTitle","templateNameCategory","statusTitles","activeHighQualityTitle","activePendingTitle","pendingTitle","activeMediumQualityTitle","pausedTitle","activeLowQualityTitle","draftTitle","rejectedTitle","deleteModal","templateName","textParts","setUpTemplate","introductionText","submitTemplate","bodyTextParts","customTemplate","headerTitle","headerBodyText","languageTitle","textInputLabel","textInputPlaceholder","languageDropdownLabel","contentDropdownLabel","introTextBadge","introBodyText","contentHeaderTitle","inputContTextAreaLabel","inputContTextAreaPlaceholder","headerLabel","footerLabel","footerTextAreaLabel","footerTextAreaPlaceholder","buttonsTextBadge","buttonsCaptionText","buttonBodyText","informativeTitle","informativeDescrText","warningTitle","warningDescrText","languageMenuItems","headerMenuItems","templateNameLabels","newDropAlertLabel","templateColumnLabels","templateNameLabel","categoryLabel","statusLabel","actionsLabel","isFilterSheetOpen","toggleFilterSheet","getSubmissionDate","userEmail","useFetchSubmissions","isSubmitted","updateSubmissions","fetchSubmissions","useShouldShowFeedback","submissions","formType","latestSubmission","filtered","createdAt","latest","current","getLatestSubmissionByType","date","now","MainContent","DetailsContainer","TitleBar","ConfirmationWrapper","FeedbackModalForm","buttonStatus","comboButtons","leftButtonLabel","rightButtonLabel","leftButtonAction","isAdjacent","isMobileAdjacent","disclaimer","constructor","this","feedbackType","rating","contactMe","phoneNumber","hasError","setIsVisible","textAlign","$colour","continueLogout","setHasError","setOpenModal","connectForm","ratingMap","Terrible","Bad","Okay","Good","Great","formattedData","suggestions","contactNumber","feedbackForm","sendFeedback","ConfirmationScreen","userInfo","isFeedbackForm","showFeedbackModal","setShowFeedbackModal","useLocation","search","shouldShowFeedback","userImage","FeedbackModal","isVisible","StyledAppContainer","DisclaimerContainer","DisclaimerHeader","DisclaimerText","Email","latencyMatrix","marginTop","ProfileContainer","profileContent","profileBanner","headerImage","profileHeader","contact","profileCards","isTag","address","countryCode","country","website","language","currency","profileData","QuickQuotesBannerData","PlusWithCircle","Settings","SavedQuotes","quotes","setQuotes","loadingNot","setLoadingNot","table","fetchQuotes","notificationType","listSavedQuotes","tableType","FeatureAppContainerFAQ","FaqHeader","faqAccordionContent","Container","ImportantInfo","TextLink","$size","ProductListContainer","TitleAndBodyText","TitleWrap","CaptionWrap","Caption","SummaryContainer","ContainerWrapper","DetailsTable","backIcon","quoteDetails","buttonVisibility","dataSets","emailScreen","Notification","ProductList","cardData","L2VpnIcon","buttonIcon","Add","stateData","DiaIcon","otherProductsCardData","L3VpnIcon","Arrow","IplcIcon","DarkFibreIcon","NplcIcon","IpTransitIcon","ProductPage","quoteSummary","gap","ErrorWrapper","ErrorTitle","ErrorMessage","HomeLink","Error404","diaCountriesBandwidth","bandwidths","twoVpnCountriesBandwidth","forms","introText","alert","iptBandwidths","CustomiseProduct","setCurrentUrl","toString","additionalDataSets","alignSelf","termsAndConditionsData","sections","heading","list","terms","SendAnEmailFormContent","SendAnEmailFormContentWhatsApp","SendAnEmail","countriesWithCities","cities","region","capacity","RequestQuote","CampaignWrapper","knowledgeHub","whiteSpace","setloadingNot","Faqs","container","circle","StyledCircleSuccess","span","StyledCircleInformative","StyledCircleWarning","StyledCircleDisabled","StyledHeader","StyledButtonContainer","modalConfig","headerAccountManagement","AccountManagementHeader","isDesktop","setisDesktop","accountManagement","ActionButton","TableData","SouthAfrica","statusCaption","Uganda","Nigeria","Ghana","actionButton","tableHeaders","tableData","AppContainer","Heading","ClickableLink","Link","Terms","to","TableWrapper","Table","TableRow","tr","td","StyledList","ul","StyledListItem","Privacy","rel","GlobalStyles","createGlobalStyle","ApiDocumentation","PeeringList","PeeringRequest","CardWrapper","MetricCardWrapper","serviceNameMap","serviceNum","requestsNum","draftsNum","userServiceRequests","setUserServiceRequests","serviceRequestsCount","setServiceRequestsCount","draftsCount","setDraftsCount","latestDraft","setLatestDraft","latestDraftName","setLatestDraftName","setFormData","setFormType","formId","setFormId","polling","draft","draftForms","form","aDate","technicalSpecs","getLatestDraftForm","formName","encodeURIComponent","_id","metricCards","metricCardData","Docs","Edit","metricData","NetworkServices","NetworkToolsWrapper","LookingGlassPortal","setResult","setMessage","delete","deleteNotification","successCount","failureCount","messageIds","notificationsCentreConfig","buttons","notificationsData","HeadingConatiner","HeadingWrapper","TableContainer","StatusTag","colour","StatusText","ButtonWrapper","columns","sortable","render","row","as","product","bandwidth","serviceLocation","locationA","locationB","expandableData","additionalInfo","serviceName","sla","contractStartDate","contractEndDate","circuitId","subseaCable","actionsList","UpArrowWithCircle","CloseWithCircle","filterCategories","columnKey","ServiceInventory","setServiceInventory","retrievedData","storedData","hasActions","isExpandable","SendConvergeEmail","PeeringListPortal","PeeringPolicyPortal","PeeringRequestPortal","getTitle","getDescription","locationCategory","primarySubseaCables","backhaulProtectionOptions","allCountries","crossConnect","l2vpnLocationHandoffInterface","steps","titleHasBackground","option","helperText","isReviewStep","bandwith","interfaceType","cable","hideTitle","distance","iface","tech","characterCount","subnet","provider","searchParams","formDataParam","formIdParam","parsedFormData","decodeURIComponent","currentService","initialFormData","salutation","productNameMap","filterFormSectionsByServiceInventory","activeProducts","section","mappedProduct","next","f","last","pop","CreateContact","updateUserAccess","CreateUser","loadingModal","setLoadingModal","loadingForm","setLoadingForm","modalOpen","faildModal","setFaildModal","modalMessage","setModalMessage","modalTitle","setModalTitle","accountContacts","setAccountContacts","formdata","line","portalFixedAdministrator","encryptedContacts","decryptedData","CryptoJS","AES","decrypt","enc","Utf8","fetchFormData","log","disabled","fibreContent","fibreFormContent","getFirstIdByEmail","contacts","find","foundServices","Salutation","FirstName","firstName","MiddleName","middleName","AccountId","accountId","LastName","lastName","MailingStreet","streetAddress","MailingCity","City","MailingCountry","Country","OtherPostalCode","postalCode","Phone","MobilePhone","mobilePhoneNumber","HomePhone","homePhoneNumber","OtherPhone","otherPhoneNumber","Department","Position","Contact_Business_Line__c","Contact_Category__c","contactCategory","ReportsToId","ReportsTo","firstService","remainingServices","records","attributes","referenceId","Portal_Access_Policies__r","Fixed_Business_Line_Product__c","Product__c","Portal_Role__c","getUserId","Contact__c","flexDirection","alignItems","justifyContent","$status","Info","open","reload","trigger","ButtonContainer","FeatureWrapper","globalCarrierServices","quickQuoteTag","nationalCarrierServices","localInternet","ServiceRequest","serviceList","UserInfoContainer","TopBar","StyledAvatar","Frame","FilterContent","FilterItem","$expanded","LoginWrapper","formatModified","rawDate","normalizedDateStr","parsedDate","isNaN","Intl","DateTimeFormat","hour","minute","format","UserDetails","closeDetails","openUserRoles","openRoles","setOpenRoles","openContactDetails","setOpenContactDetails","openWorkDetails","setOpenWorkDetails","isAccessExpanded","setIsAccessExpanded","isContactExpanded","setIsContactExpanded","isWorkExpanded","setIsWorkExpanded","workDetailsFields","workDetails","businessLine","inline","department","contactDetailsFields","contactDetails","city","provinceOrState","zipOrPostalCode","initials","trim","word","toUpperCase","join","SideSheet","$cornerRadius","$position","$isSheetOpen","IconButton","$isInverted","$iconSize","$icon","Avatar","paddingTop","created","modified","ChevronDown","transform","transition","handleCloseRoles","Row","flexWrap","portal","handleCloseContactDetails","handleCloseWorkDetails","bottom","paddingRight","boxSizing","PortalColumn","isProduct","openDetails","setOpenDetails","selectedUser","setSelectedUser","labelText","preventDefault","handleOpenModal","handleCloseDetails","filterWholesaleCategories","UserModal","isMobile","setIsMobile","handleWindowSizeChange","UserManagement","setOpen","openToast","setOpenToast","listLoading","setListLoading","setReload","useColumns","fetchAccountContacts","getAccountContacts","Id","reportsToId","lastModified","createdDate","mobileNumber","portalAccessArray","homePhone","otherPhone","from","Set","portalAccessPolicies","fixedProducts","wholesaleProducts","reportsTo","encrypt","getLabel","getIcon","filteredContacts","dateA","ToastAction","altText","handleCloseModal","No_Longer_With_Company__c","contactId","editUserStatus","displayType","dateString","toLocaleString","formatDate","submittedAt","zIndex","swipeDirection","onSwipeCancel","ServiceRequestTable","showDraftToastNotification","setShowDraftToastNotification","showSubmitToastNotification","setShowSubmitToastNotification","showToast","setShowToast","loadingData","setLoadingData","dataSource","isDraft","newUrl","replaceState","DynamicToastNotification","ServiceRequestSelection","selectCards","getProductFromPath","pathSegments","Boolean","pageValue","setPageValue","Lightning","Document","selectData","isQuoteSummary","EditUserDetails","editFormContent","editWholesaleContent","userData","faqConfig","supportFormData","SupportEmail","ConfirmationModal","isDismissible","Success","CustomerSupport","supportForm","supportEmail","sendSupportEmail","maxWidth","marginRight","FilterInputWrapper","InputContainer","InputWrapper","getAllMessageAnalytics","startDate","endDate","granularity","wabaId","start","end","phoneNumbers","getConversationAnalytics","productTypes","conversation_types","conversationCategories","dimensions","formatDateLocal","input","Analytics","isDataLoading","setIsDataLoading","todayDate","setStartDate","setEndDate","isOpenStartDate","setIsOpenStartDate","isOpenEndDate","setIsOpenEndDate","triggerFilter","setTriggerFilter","setCardData","setPhoneNumber","activePhoneNums","setActivePhoneNums","categoryConfig","MARKETING","Marketplace","UTILITY","AUTH","LockOpen","AUTH_INTL","SERVICE","MARKETING_MM_LITE","FREE_CUSTOMER","CustomerCare","FREE_ENTRY","fetchAnalyticsData","activePhoneRes","code","display_phone_number","allMessageRes","conversationRes","all","finalResult","processAllMessages","analytics","data_points","dataPoints","conversation_analytics","transformDeliveryData","grouped","acc","conversation_type","conversation_category","conversation","allTotal","values","flatMap","freeTotal","paidTotal","makeCards","REGULAR","FREE_TIER","categories","total","totals","curr","DatePicker","$hasMonthSelection","datePickerConfig","minDate","onDateChange","formattedDate","$hasRangeSelection","TextInput","$inputIcon","inputIconOnClick","inputMode","placeholder","maxDate","Menu","hasSearch","isCountryList","items","selectedItem","isAttached","onItemSelect","sanitizedNumber","variant","Dropdown","$setIsOpen","isAnalyticsMetricData","FloatingButton","OptionsPanel","OptionItem","OptionClose","ButtonText","ProductContainer","SubmitFeedback","feedback","onSuccess","hasContactMe","feedbackPayload","portalProductType","difficulties","recommendation","productLike","comments","anyDifficulties","likeMost","SidePanelIcon","productConfig","helpCentreConfig","helpCentreOptions","link","feedbackTypeConfig","TalkFree","CheckboxContainer","TitleAndDescription","StyledImage","onDownloadClick","download","cursor","Download","stopPropagation","LogATicketComponent","AspectRatio","$ratio","handleButtonClick","CardContainer","HelpCentreComponent","textDecoration","FeedbackButtonComponent","sheetOpen","setSheetOpen","sheetView","setSheetView","selectedOption","setSelectedOption","setSelectedProduct","selectedFeedbackType","setSelectedFeedbackType","selectedHelpCentre","setSelectedHelpCentre","selectedHelpCentreOption","setSelectedHelpCentreOption","subtitle","setSubtitle","setCaption","showConfirmation","setShowConfirmation","submissionError","setSubmissionError","toggleOptions","prev","handleOptionClick","openSheetFor","closeSheet","handleProductSelect","productId","currentFormKey","getFormKey","$isIconPrimary","$hasBackArrow","onBackArrow","backToPrevious","centre","c","SelectCard","centreId","handleHelpCentreSelect","renderHelpCentreOptions","card","optionId","opt","handleHelpCentreOptionSelect","renderHelpCentreContent","o","feedbackId","handleFeedbackSelect","paddingLeft","isCreateFlow","DashboardContainer","ReportContainer","EmptyWrapper","NoResults","MicroButton","serviceNumber","buttonEnabled","products","hasReport","availableReports","unavailableReports","ReportCard","ActionButtonContainer","getColumns","ProductReport","SpeedFast","Save","Modem","tableHeading","tableSubHeading","HeroBanenr","HeroContent","TextContent","ComboButtonsGlobalOverride","HeaderButton","HeaderLeft","InfoWrapper","InfoCard","InfoHeaderRow","maskCredential","credential","repeat","visibleChars","isCopied","setIsCopied","navigator","clipboard","writeText","handleCopy","border","opacity","Check","Copy","getHours","ampm","getMinutes","callBackUrl","createdOn","apiViewColumns","MaskedCredentialCell","apiKey","consumerSecret","getActionsList","FAQCard","ChevronUp","paddingBottom","ListItem","getAppDetails","appName","isVerified","setIsVerified","formModal","setFormModal","isSuccess","setIsSuccess","isError","setIsError","setShowNotification","apiProducts","setApiProducts","userApps","setUserApps","appTableData","setAppTableData","newlyRegistered","setNewlyRegistered","createAppModal","setCreateAppModal","userAccount","getApiDevAccount","apps","checkDevAccount","getApiProducts","mapped","fetchProducts","rows","appNames","detailPromises","appId","callbackUrl","consumerKey","getAllAppData","loadApps","createAccountFormConfig","createApiDev","createAppFormConfig","payload","createApp","whatsAppDocs","TabsComponent","defaultValue","TabList","TabTrigger","TabContents","onShow","isCardsView","errorType","showSearchOnly","SendReportModal","sendEmailReport","setEmailAddress","setSendEmailReport","onChange","isSendReportOpen","setIsSendReportOpen","setEmailRowData","sendReport","handleCreateCampaignClick","removeItem","audience","failed","failureReason","isCampaigns","isCatalogues","InfoCardComponent","callBackURL","apiproduct","useParams","setData","ChevronLeft","credentials","NavBar","hiddenPaths","App","isNavMenuOpen","setIsMenuOpen","setIsSupueruser","isOpenModal","setIsOpenModal","isFeedbackVisible","setIsFeedbackVisible","isNetworkTools","isPeering","isWhatsAppAPI","isNetworkToolsPage","hideFeedbackButton","shouldShowLogoutFeedback","useLogoutWithFeedback","continueLogoutRef","useRef","executeLogout","resolve","initialize","set","user_properties","portalWholesaleAdministrator","observer","MutationObserver","isTextVisible","textContent","observe","childList","subtree","disconnect","Helmet","margin","$m","$l","$xl","Routes","Route","element","NotificationsCentre","LatencyMatrix","WhatsAppAPIPortal","WhatsAppAPIsView","OverviewPage","MessageTemplates","Catalogues","CreateFlows","LogSupportTicket","QuickQuoteSupportTicket","ProvideFeedback","UpcomingServices","CampaignManagement","CampaignsTable","SupportAndFaqs","AccountManagement","TermsAndConditions","ConvergeDashboard","TechnicalSpecificationsForm","SupportTicket","QuickQuotesBasicForm","ReportingDashboard","ReportingAnalytics","Disclaimer","Profile","RedirectToIPXPortal","RedirectToSMSHub","reportWebVitals","miscTracking","eventCategory","eventLabel","nonInteraction","eventAction","SMS_HUB_URL","Externals","react","FeatureHubReact","paragonFoundation","paragonButtons","paragonDisplay","paragonIcons","paragonIndicators","paragonLayouts","paragonOverlays","styledComponents","productQuoteData","emailTempData","apiClientService","postMethod","postMethodBsp","putMethodBsp","templateId","postUpload","senderId","fileType","Accept","getMethodBspTemplates","limit","getWbspAnalytics","templateIds","getMethodBspTemplatesForCampaigns","postVerificationDocs","docType","fileKey","uploadedDoc","FormData","validationFileType","append","validationRule","getVerificationStatus","submitVerificationDocs","docKeys","every","stored","parsed","file","getCampaignMethod","deleteBspTemplate","deleteQuote","quoteName","clearData","getData","newData","getEmailTempData","setEmailTempData","postQuote","downloadDataSheet","ok","blob","downloadUrl","URL","createObjectURL","createElement","setAttribute","appendChild","click","removeChild","revokeObjectURL","postEmailQuote","getPhoneNumberMethod","postCampaignMethod","listQuotes","postSendNotification","cancelService","upgradeService","postDraftEmail","saveRequest","saveUpgradeRequest","postLeadEmail","updateUser","removeUserAccess","deleteRequest","updateRequest","defineExternals","featureAppManager","createFeatureHub","moduleLoader","loadFederatedModule","loadAmdModule","providedExternals","featureServiceDefinitions","defineHistoryService","createRootLocationTransformer","consumerPathsQueryParamName","sharedData","dynamicData","featureServiceDependencies","root","ReactDOM","getElementById","initialise","Initialise","consentAds","consentAnalytics","consentPreferences","gtmId","FeatureHubContextProvider","HistoryRouter","Auth0Provider","domain","useRefreshTokens","cacheLocation","authorizationParams","scope","redirect_uri","handleClose","str","char"],"sourceRoot":""}